2011-01-18 77 views
0

在VB.NET中,我爲SqlParameterCollection類創建了擴展方法,以便我可以在一行代碼中添加「詳細」參數。我知道.AddWithValue方法將導致SQL Server在每次通過SqlCommand調用存儲過程時使用SqlParameter對象(不指定字母數字數據類型的大小)(即VarChar或NVarChar)來重新評估SQL Server執行計劃。換句話說,除了數據類型的大小是常量的INT數據類型之外,.AddWithValue是一個壞主意。做這些擴展方法看起來正確嗎?

我從來沒有使用過擴展方法,所以這個代碼似乎完成我想要的?代碼「有效」,但我正在尋找另一組眼睛,以確保我沒有結束會強制重新評估SQL Server執行計劃的參數。

編輯:我不得不實際添加參數到「參數」集合,所以我更新了代碼。現在, 「作品」 ;-)

Imports System.Runtime.CompilerServices 

Public Module AdoParameterExtensions 

    <System.Runtime.CompilerServices.Extension()> _ 
    Public Sub AddWithNumericValue(ByVal params As System.Data.SqlClient.SqlParameterCollection, ByVal parameterName As String, ByVal parameterType As SqlDbType, ByVal value As Object) 

     Dim newParam As New System.Data.SqlClient.SqlParameter 

     With newParam 

      .ParameterName = parameterName 
      .SqlDbType = parameterType 
      .Value = value 

     End With 

     params.Add(newParam) 

    End Sub 

    <System.Runtime.CompilerServices.Extension()> _ 
    Public Sub AddWithStringValue(ByVal params As System.Data.SqlClient.SqlParameterCollection, ByVal parameterName As String, ByVal parameterType As SqlDbType, ByVal size As Integer, ByVal value As Object) 

     Dim newParam As New System.Data.SqlClient.SqlParameter 

     With newParam 

      .ParameterName = parameterName 
      .SqlDbType = parameterType 
      .Size = size 
      .Value = value 

     End With 

     params.Add(newParam) 

    End Sub 

End Module 

感謝您的反饋。

回答

3

你的擴展看起來很好。使用擴展方法不會影響SQL Server執行計劃是否被重新評估。

我會做的一個建議是返回SqlParameterCollection而不是void(Sub)。然後可以流利地添加參數。

而不是

params.AddWithNumericValue(...) 
params.AddWithNumericValue(...) 
params.AddWithNumericValue(...) 

你寫的

params.AddWithNumericValue(...).AddWithNumericValue(...).AddWithNumericValue(...) 

這是一個偏好,但像這樣的擴展我來欣賞的風格。

相關問題