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

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

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

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

4 ответа

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

    var parameters = new[]{
                new SqlParameter(){ ParameterName="foo", Value="hello" },
                new SqlParameter(){ ParameterName="bar", Value="World" }
            };
    x.ExecuteScalar<int>(commandText, commandType, parameters);
    

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

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

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

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

x.ExecuteScalar(commandText, commandType, parameters);

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

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

 DbParameter[] parameters = new DbParameter[2]; 
 parameters[0]  = new SqlParameter("param1",  123456);
 parameters[1]  = new SqlParameter("param2",  "abcdef");

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

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

В "идеальном мире" вы должны создать любой единственный параметр с помощью этого кода:

DbProviderFactory f = DbProviderFactories.GetFactory("System.Data.SqlClient");
DbParameter parameter = f.CreateParameter();

но вам, вероятно, придется использовать некоторые определенные функции платформы, которые реализует SqlParameter... как это делает SqlCommand: SqlCommand.Parameters.AddWithValue() и т. д.

Другие вопросы по тегам