Имя OleDbParameter навязчивая идея

Так как OleDbParameter не использует именованные параметры (из-за своей природы), почему.NET OleDbParameter класс ожидает имя? (string parametername ...)

Все конструкторы требуют имя параметра, и я никогда не уверен, какое имя дать ему; меня зовут ок? или имя моей бабушки?

3 ответа

Хотя провайдеры OleDb/Odbc используют позиционные параметры вместо именованных параметров -

  1. параметры должны быть идентифицированы каким-либо образом внутри коллекции OleDbParameter, если вам нужно сослаться на них.

  2. важно, что при построении параметризованного оператора sql переменная для каждого параметра объявляется и присваивается соответствующее значение. и затем используется в операторе sql, который выполняется.

Взять, к примеру:

string sql = "SELECT * FROM MyTable WHERE Field = ?";
OleDbCommand cmd = new OleDbCommmand(sql, sqlConnection);
cmd.Parameters.Add("@FieldValue", OleDbType.Int32, 42);
OleDbDataReader dr = cmd.ExecuteReader();

Выполненный SQL будет что-то вроде (или близко, я думаю):

DECLARE @FieldValue INT;
SET @FieldValue = 42;
SELECT * FROM MyTable WHERE Field = @FieldValue

Рекомендуется использовать имя параметра, которое лучше всего соответствует имени столбца, с которым вы работаете.

Существуют интерфейсы и фабрики для обеспечения определенной степени независимости основного поставщика для доступа к данным - IDataParameter, DbParameter, DbProviderFactory и т. Д.

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

Как и все остальное в программировании, назовите это что-то значимое для вашего контекста! (имя, адрес, город и т. д.).

Вы используете имена для доступа к коллекции параметров по имени в вашем коде C#:

OleDbCommand command = new OleDbCommand();
...//Add your parameters with names, then reference them later if you need to:
command.Parameters["name"].Value = "your name or your grandmothers name here";

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

OleDbParameter outParam = new OleDbParameter();
outParam.Direction = ParameterDirection.Output;
outParam.DbType = DbType.Date;
outParam.ParameterName = "outParam";
command.Parameters.Add(outParam);
command.ExecuteNonQuery();
DateTime outParam = Convert.ToDateTime(command.Parameters["outParam"].Value);
Другие вопросы по тегам