Есть ли способ уменьшить этот код ado.net?

Мне нужно значительно сократить этот код, есть ли способ создать параметр sql, описывающий его направление? Вот код:

    Dim Oparam1 As SqlParameter = New SqlParameter("@ROJO", SqlDbType.Int)
    Dim Oparam2 As SqlParameter = New SqlParameter("@AMBAR", SqlDbType.Int)
    Dim Oparam3 As SqlParameter = New SqlParameter("@AMARILLO", SqlDbType.Int)
    Dim Oparam4 As SqlParameter = New SqlParameter("@VERDE", SqlDbType.Int)
    Oparam1.Direction = ParameterDirection.Output
    Oparam2.Direction = ParameterDirection.Output
    Oparam3.Direction = ParameterDirection.Output
    Oparam4.Direction = ParameterDirection.Output
    command.Parameters.Add(Oparam1)
    command.Parameters.Add(Oparam2)
    command.Parameters.Add(Oparam3)
    command.Parameters.Add(Oparam4)

заранее спасибо.


person Diego Pacheco    schedule 26.03.2013    source источник
comment
Я вижу 3 набора из 4 почти идентичных строк кода. Создайте метод и передайте параметры, которые могут варьироваться.   -  person Anthony Pegram    schedule 26.03.2013


Ответы (3)


Существует перегрузка конструктора, который включает направление, но тогда вы нужно указать множество других параметров, поэтому код в конце концов не будет короче.

Вы можете сделать метод расширения:

Imports System.Runtime.CompilerServices

Module SqlExtensions

  <Extension()>
  Public Function SetOutput(parameter As SqlParameter) As SqlParameter
    parameter.Direction = ParameterDirection.Output
    Return parameter
  End Function

End Module

Теперь вы можете использовать это в параметрах:

command.Parameters.Add(New SqlParameter("@ROJO", SqlDbType.Int).SetOutput())
command.Parameters.Add(New SqlParameter("@AMBAR", SqlDbType.Int).SetOutput())
command.Parameters.Add(New SqlParameter("@AMARILLO", SqlDbType.Int).SetOutput())
command.Parameters.Add(New SqlParameter("@VERDE", SqlDbType.Int).SetOutput())
person Guffa    schedule 26.03.2013

Для каждого параметра вы можете использовать

C#

command.Parameters.Add(new SqlParameter("@name", SqlDbType.Int)
    {Direction = ParameterDirection.Output});

VB.NET

command.Parameters.Add(New SqlParameter("@name", SqlDbType.Int) With { _
    .Direction = ParameterDirection.Output _
})
person Phil    schedule 26.03.2013

Пытаться:

command.Parameters.Add(new SqlParameter("@ROJO", SqlDbType.Int) With {.Direction = ParameterDirection.Output});
person Jmyster    schedule 26.03.2013