Как создать массив DbParameter [] - PullRequest
       21

Как создать массив DbParameter []

5 голосов
/ 17 августа 2011

В руководстве говорится, что метод ExecuteScalar должен использоваться следующим образом:

public T ExecuteScalar<T>( 
   string commandText,
   CommandType commandType,
   params DbParameter[] parameters
)

Но как мне создать этот массив параметров?Мне нужно предоставить моей хранимой процедуре 2 параметра.

Ответы [ 4 ]

8 голосов
/ 17 августа 2011
  • DbParameter является абстрактным классом.
  • Поскольку тип T не может быть выведен из использования, вы должны указать его.
  • Хотя вы можете просто передатьпеременное число параметров без создания массива, если вы динамически создаете переменное количество параметров, массив является вашим другом.

    var parameters = new[]{
                new SqlParameter(){ ParameterName="foo", Value="hello" },
                new SqlParameter(){ ParameterName="bar", Value="World" }
            };
    x.ExecuteScalar<int>(commandText, commandType, parameters);
    
4 голосов
/ 17 августа 2011

Параметр parameters имеет ключевое слово params .Это означает, что вам не нужно явно создавать массив, но вы можете передать методу переменное число аргументов:

x.ExecuteScalar(commandText, commandType, parameter1, parameter2);

Однако, если вы хотите, вы можете создать массив явно и передать егометод следующим образом:

DbParameter[] parameters = new DbParameter[] { parameter1, parameter2 };

x.ExecuteScalar(commandText, commandType, parameters);
2 голосов
/ 17 августа 2011

DbParameter - абстрактный класс, но вы можете создать экземпляр производного типа.

Если вы используете сервер Sql, то это SqlParameter:

 DbParameter[] parameters = new DbParameter[2]; 
 parameters[0]  = new SqlParameter("param1",  123456);
 parameters[1]  = new SqlParameter("param2",  "abcdef");
1 голос
/ 17 августа 2011

Ключевое слово params означает, что вы можете указать различное количество параметров (от 1 до [в значительной степени] бесконечности).

Вы можете просто вызвать метод следующим образом: ExecuteScalar<SomeType>("Command!", CommandType.SomeCommandType, dbParameter1, dbParameter2);

...