2012-09-28 70 views
0

我碰到了這段代碼(不是我的),它讓我略微確定了一點。打開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均爲長函數添加一堆參數和更新數據庫)

現在,是它猶太傳遞打開的連接作爲一個參數或可能該引線解決問題?目前還沒有打破,只是想知道最佳做法是什麼。

在此先感謝。

回答

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

+0

有趣。那麼你是否也在這個功能中進行清理(處置等)? – Brandi

+1

@Brandi號我會在使用塊中調用函數。我會用一個例子來編輯我的答案。 –