我遇到了这段代码(不是我的代码),它让我有点意外。
Public Overridable Function Save(ByVal UpdateUserID As Integer) As Integer
Dim conn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("mcle").ToString())
Try
conn.Open()
Return Save(conn, UpdateUserID)
Finally
conn.Close()
End Try
End Function
Public Overridable Function Save(ByVal conn As SqlConnection, ByVal UpdateUserID As Integer) As Integer
If Me.activityID <> 0 Then
Return SaveAct(conn, UpdateUserID)
Else
Return AddAct(conn, UpdateUserID)
End If
End Function
(作为参考,SaveAct和AddAct都是长函数,可以添加一堆参数并更新数据库)
现在,将开放连接作为参数传递是否可行,或者这会导致问题?到目前为止没有打破,只是想知道最佳做法是什么。
提前致谢。
答案 0 :(得分:2)
传递一个开放的连接是完全可以的...虽然通常我会将其反转并使用一个返回一个打开并准备好连接到现有函数的函数。所以它可能看起来像这样:
Public Overridable Function Save(ByVal UpdateUserID As Integer) As Integer
Using cn As SqlConnection = GetConnection()
If Me.activityID <> 0 Then
Return SaveAct(conn, UpdateUserID)
Else
Return AddAct(conn, UpdateUserID)
End If
End Using
End Function
此代码将成为数据访问层的一部分,这样只有某些方法/类才能看到GetConnection()方法。