В VB.NET я создаю методы расширения для класса SqlParameterCollection, чтобы я мог добавить «подробные» параметры в одну строку кода.Я понимаю, что метод .AddWithValue заставит SQL Server переоценивать план выполнения SQL Server каждый раз, когда хранимая процедура вызывается через SqlCommand с объектами SqlParameter, которые не указывают размер буквенно-цифровых типов данных (т. Е. VarChar или NVarChar).Другими словами, .AddWithValue - плохая идея, за исключением типов, таких как типы данных INT, где размер типа данных постоянен.
Я никогда раньше не использовал методы расширения, поэтому этот код, кажется, выполняет то, чтоЯ хочу?Код «работает», но я ищу другой набор глаз, чтобы убедиться, что у меня нет параметров, которые заставят пересмотреть план выполнения SQL Server.
РЕДАКТИРОВАТЬЯ должен был на самом деле добавить параметр в коллекцию "params", поэтому я обновил код.Теперь это "работает"; -)
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
Спасибо за ваш отзыв.