none
SQL資料庫連線與關閉的問題 RRS feed

  • 問題

  • 我是使用 vb2005 與 sql server 2005,以下是我的類別庫的程式碼。

     

    Sub New(ByVal SQLDbName As String) '在程式中以 New 建立新物件時,會被執行的函式(建構函式)
            Connection = New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\user_data\" & SQLDbName & ";Integrated Security=True;User Instance=True")

    End Sub

     

        Function GetDataTable(ByVal SQLTbName As String) As DataTable
            Try
                Dim DT As New DataTable
                Dim DA As New SqlClient.SqlDataAdapter(SQLTbName, Connection)
                DA.Fill(DT)

                Return DT
            Catch ex As Exception
                MsgBox("讀取資料時發生錯誤(" & SQLTbName & ") " & vbCrLf & "錯誤訊息:" & ex.Message)
                Return Nothing
            End Try
        End Function

     

    我看過一些書以及網路上的高手們,都說連線完後就關閉,但我照著我買的其中一本書

    是沒有看到Connection.Close( ),以上是我看完書後自己寫的類別庫,可以正常使用,

    沒有問題。

     

    問題1:我應該要把Connection.Close( )放在上面程式碼的那裡呢 @@?

     

    問題2:Return Nothing 這是什麼意思?書裡沒有寫><

    2008年3月9日 上午 02:33

解答

  • HI,

     

    使用SqlDataAdapter+DataTable的程式屬於離線作業, 資料庫操作完畢會自動中斷對資料庫的連線, 不需要另外以程式控制

    Return Nothing表示傳回空的結果

     

    tihs

    2008年3月9日 上午 08:49

所有回覆

  • HI,

     

    使用SqlDataAdapter+DataTable的程式屬於離線作業, 資料庫操作完畢會自動中斷對資料庫的連線, 不需要另外以程式控制

    Return Nothing表示傳回空的結果

     

    tihs

    2008年3月9日 上午 08:49
  • 喔喔...原來它是使用完後,就自動關掉的阿 ^_^

    那就是可以不用理它就對了@@"

     

    感謝,再請教一下,傳空值的意思就是,因為已經錯誤了

    要避免有問題,所以就傳空的值,是這個意思嗎?

    2008年3月9日 下午 12:34
  • 之所以會Return Nothing,主要是因為你這是個Function,需Return DataTable.

    而你的Catch就必需要有東西Return,不然在編譯時,就會出現"部分程式碼路徑並未傳回值".

     

    你在Catch裡用的是MsgBox去把錯誤訊息顯示出來,也可以Throw 一個Exception回去,由呼叫Function的程式段去Catch顯示訊息.

     

    SqlDataAdapter在執行時,Fill或Update時,是會自動開啟Connection及關閉Connection.所以不用特別去對Connection做動作.

     

    SqlCommand就需要對Connection做動作,在執行SqlCommand的ExecuteScalar(),ExecuteReader()...等之前,必需先開啟Connection,當然事後也必需手動關閉.

    2008年3月10日 上午 12:58
  • 感謝兩位,偶已經了解了^_^

    偶之前都是用 SqlCommand ,後來買了另一本書,

    發現跟之前我買的兩本書做法都不一樣,現在我懂了

    ,有問題我再請教你們

    2008年3月10日 上午 01:41
  • Error 後傳回 Nothing (空值) 是很正常的作法...

    因為沒有查到資料,傳回空值以利後續程式的判斷(If DataTable is nothing Then...)

    否則後續程式很可能會去讀到Nothing的DataTable,就會報錯嚕!!

     

    另外DataAdapter的特性我沒記錯的話....

    你如果沒有自已下 Connection.Open的話,它是會自已開啟連線..用完自己關....

    但是如果你有下Open的話,用完就要自已下Close嚕~~

     

    2008年3月10日 上午 02:22