2014-05-13 29 views
-1

在下面的方法是合適的與SQL應該使用使用利用/結束或手動關閉的SqlConnection

方法1

​​

方法2

Try 
    dim conn as new sqlconnection =("....") 
    conn.open() 
    '/to do 
Catch 
    MsgBox("ex.message") 
Finally 
    conn.close() 
End Try 
+0

請花點時間閱讀本文:http://stackoverflow.com/help/how-to-ask –

+0

@TiesonT。 [brandNew](http://stackoverflow.com/questions/23623797/sql-connection-declaration-via-vb-net-code?noredirect=1#comment36271386_23623797)這裏給出答案或評論,如果你知道投票前的任何事情或者你可以通過[edit](http://stackoverflow.com/posts/23623797/edit)來幫助我? – friend

回答

1
工作

方法1更通常,因爲方法2混合數據訪問(打開數據庫ase連接)和演示(向用戶顯示消息)。

將應用程序分爲演示文稿,業務邏輯和數據訪問層更爲常見。例如。

... Presentation code 
Try 
    BusinessLogic.SaveData(...) 
Catch 
    MsgBox... 
End Try 

... BusinessLogic tier 
Public Sub SaveData(...) 
    DataAccess.SaveData(...) 
End Sub 

... Data access tier 
Public Sub SaveData(...) 
    Using conn As New SqlConnection("....") 
     ... 
    End Using 
End Sub 

另請注意,如果您可以處理它們,通常應該只捕獲異常。因此,業務邏輯和數據訪問層應該很少使用Catch塊 - 它們只是讓Exceptions傳播到表示層。表示層可能能夠處理異常(例如向用戶顯示消息並讓他們重試),因此可能包含一個Catch塊。

+0

Well Answered ...... !!!! – friend

0

我建議您在嘗試調用SqlConnection對象的Open方法時始終使用Try塊,並且在完成時顯式調用Close方法。顯然這需要在連接對象超出範圍之前完成,或者使用塊(如果它確實是本地聲明的)。

使用Using塊取決於您對SqlConnection對象所需的範圍。

另外我會在另一個Try塊中調用Close方法,而不是在Finally部分。

而你正在調用字符串文字「ex.message」,它將被顯示,而不是錯誤信息。

Using conn As New SqlConnection("....") 

    Try 
     conn.open() 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
     Return 

    Catch SqlEx As SqlException 
     MessageBox.Show(SqlEx.Message) 
     Return 

    End Try 

    'do data processing here using the conn object etc 

    Try 

     conn.close() 

    Catch ex As Exception 

    Catch SqlEx As SqlException 

    End Try 

End Using 
+0

如果對'conn.Open'的調用在這裏失敗,那麼代碼將繼續到您所說的「執行數據處理......」的部分。如果連接無法打開,你肯定不想嘗試做任何數據處理? –

+0

正確。異常處理程序中應該有一個Return。我已修改。 –

相關問題