Имя OleDbParameter навязчивая идея - PullRequest
3 голосов
/ 23 декабря 2008

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

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

Ответы [ 3 ]

3 голосов
/ 23 декабря 2008

Хотя провайдеры 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

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

1 голос
/ 23 декабря 2008

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

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

1 голос
/ 23 декабря 2008

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

Вы используете имена для доступа к коллекции параметров по имени, находясь в вашем коде 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);
...