Эти методы расширения выглядят правильно? - PullRequest
0 голосов
/ 19 января 2011

В 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

Спасибо за ваш отзыв.

1 Ответ

3 голосов
/ 19 января 2011

Ваши расширения выглядят хорошо.Будет ли пересмотрен план выполнения SQL Server, не будет зависеть использование метода Extension.

Одна из рекомендаций, которую я бы сделал, - вернуть SqlParameterCollection вместо void (Sub).Затем параметры можно легко добавлять.

Вместо

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

вы пишете как

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

Это предпочтение, но с такими расширениями я пришелцени стиль.

...