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 に答える