在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
感谢您的反馈。