Имя OleDbParameter навязчивая идея
Так как OleDbParameter
не использует именованные параметры (из-за своей природы), почему.NET OleDbParameter
класс ожидает имя? (string parametername ...)
Все конструкторы требуют имя параметра, и я никогда не уверен, какое имя дать ему; меня зовут ок? или имя моей бабушки?
3 ответа
Хотя провайдеры OleDb/Odbc используют позиционные параметры вместо именованных параметров -
параметры должны быть идентифицированы каким-либо образом внутри коллекции OleDbParameter, если вам нужно сослаться на них.
важно, что при построении параметризованного оператора 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);