Как создать массив 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() и т. д.