Порядок и приоритет параметров 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