Порядок и приоритет параметров OleDbCommand
Я отлаживал этот запрос за последние 40 минут, и проблема, по-видимому, в том, что порядок параметров в конце концов.
SELECT * FROM tblSomeThing WHERE id = @id AND debut = @dtDebut AND fin = @dtFin
Затем я добавляю параметры таким образом, замечаю, что два последних параметра переключаются, я не получаю никаких результатов.
cmd.Parameters.Add("@id", OleDbType.Integer).Value = idSociete;
cmd.Parameters.Add("@dtFin", OleDbType.Date).Value = dateTraitementFin;
cmd.Parameters.Add("@dtDebut", OleDbType.Date).Value = dateTraitementDebut;
Когда я объявляю параметры так, как они появляются в очереди, все работает отлично.
Я думал, что именованные параметры были на первом месте, чтобы решить эту проблему! что мне здесь не хватает?
Спасибо
Ответы
Ответ 1
Согласно http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters.aspx OleDbCommand не поддерживает именованный параметр
Поставщик OLE DB.NET не поддерживает именованные параметры для передачи параметров в оператор SQL или хранимую процедуру, вызванную OleDbCommand, когда для параметра CommandType установлено значение Text. В этом случае необходимо использовать метку вопроса (?). Например:
SELECT * FROM Customers WHERE CustomerID = ?
Следовательно, порядок, в котором объекты OleDbParameter добавляются в OleDbParameterCollection, должен непосредственно соответствовать позиции заполнителя вопросительного знака для параметра в тексте команды.
Поэтому порядок параметров важен.
Ответ 2
Если я правильно помню, если OleDbCommand
в ADO.NET функционирует аналогично старой библиотеке/библиотекам ADO (используется в VB6, VBA и т.д.), то набор параметров не определяет параметры по имени, только по положению в коллекции. Это похоже на поведение, которое вы испытываете.
Ответ 3
Неположительно, но это не похоже на то, что ваши параметры добавлены в одну и ту же последовательность, а также те же имена, что и их "@" -результаты запроса...
@id,
@dtDebut
then
@dateTraitementFin