在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
感謝您的反饋。