【问题标题】:should use using/end using or manually close sqlConnection [duplicate]应该使用使用/结束使用或手动关闭sqlConnection [重复]
【发布时间】:2014-05-13 06:01:04
【问题描述】:

在以下适合使用SQL的方法中

方法一

Using conn As New SqlConnection("....")
     conn.Open()
     '/to do
End Using

方法二

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

【问题讨论】:

标签: vb.net sqlconnection using-statement


【解决方案1】:

方法 1 更常用,因为方法 2 混合了数据访问(打开数据库连接)和呈现(向用户显示消息)。

将您的应用程序分成表示层、业务逻辑层和数据访问层更为常见。例如

... 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 块——它们只是让异常传播到表示层。表示层可能能够处理异常(例如,向用户显示消息并让他们重试),因此可能包含 Catch 块。

【讨论】:

  • 回答得好......!!!!
【解决方案2】:

我建议您在尝试调用 SqlConnection 对象的 Open 方法时始终使用 Try 块,并在完成后显式调用 Close 方法。显然,这需要在连接对象在方法或 Using 块结束时超出范围之前完成(如果它确实是本地声明的)。

Using 块的使用取决于 SqlConnection 对象所需的范围。

另外,我会在另一个 Try 块中而不是在 finally 部分中调用 Close 方法。

您正在调用字符串文字“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

【讨论】:

  • 如果在此处调用conn.Open 失败,代码将继续到您说'do data processing... 的部分。如果连接打开失败,您肯定不想尝试进行任何数据处理吗?
  • 正确。异常处理程序中应该有一个 Return。我已经修改了。
猜你喜欢
  • 2014-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2014-01-04
  • 2010-10-23
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多