打开SqlConnection作为参数传递?

时间:2012-09-28 17:42:52

标签: sql vb.net sqlconnection

我遇到了这段代码(不是我的代码),它让我有点意外。

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都是长函数,可以添加一堆参数并更新数据库)

现在,将开放连接作为参数传递是否可行,或者这会导致问题?到目前为止没有打破,只是想知道最佳做法是什么。

提前致谢。

1 个答案:

答案 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()方法。