0

我遇到了这段代码(不是我的),这让我有点奇怪。

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 都是添加一堆参数和更新数据库的长函数)

现在,将打开的连接作为参数传递是否符合规定,或者这会导致问题吗?到目前为止还没有突破,只是想知道这里的最佳实践是什么。

提前致谢。

4

1 回答 1

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

于 2012-09-28T17:46:58.837 回答