Привязка параметров к команде OLEDB вызывает ошибку

Я использую AS 400 OLEDB с .NET. Оно использует '?' вместо '@param для привязки параметров к команде Теперь возникает ситуация, когда команда выглядит как

SELECT ...
FROM
   (SELECT ... 
         ROW_NUMBER() OVER(ORDER BY ColumnName) as RowNum
    FROM Employees e
   ) as DerivedTableName
WHERE RowNum BETWEEN @startRowIndex AND (@startRowIndex + @maximumRows) - 1

Теперь моя команда становится

    SELECT ...
FROM
   (SELECT ... 
         ROW_NUMBER() OVER(ORDER BY ColumnName) as RowNum
    FROM Employees e
   ) as DerivedTableName
WHERE RowNum BETWEEN ? AND (? + ?) - 1

Теперь, когда я привязываю такие параметры, как

myCommand.Parameters.Add(new OleDbParameter("?",startRowIndex));
myCommand.Parameters.Add(new OleDbParameter("?", startRowIndex));
myCommand.Parameters.Add(new OleDbParameter("?", MaximumRows));

Выдает ошибку

SQL0417: Combination of parameter markers not valid.
Cause . . . . . :   The statement string specified as the object of a PREPARE statement contains a predicate or expression where parameter markers have been used as operands of the same operator.  The following restrictions apply to the use of parameter markers: -- Both the operands in a predicate cannot be parameter markers. For example, specifying predicates of the form:    ? = ?      or    ? = ( SELECT ? FROM x ) are not valid. 

Как привязать параметры в этой ситуации? Я хочу избежать инъекции sql :)


person Zo Has    schedule 09.07.2010    source источник


Ответы (1)


Попробуйте изменить названия параметров

myCommand.Parameters.Add(new OleDbParameter("@startRowIndex",startRowIndex));
myCommand.Parameters.Add(new OleDbParameter("@startRowIndex2", startRowIndex));
myCommand.Parameters.Add(new OleDbParameter("@MaximumRows", MaximumRows));

но оставьте SQL как есть.

person Chris Diver    schedule 09.07.2010
comment
Спасибо за ответ Крис. В OLEDB параметры идут с индексом и символом '?' а не с именем '@param'. Это работает на SQLServer. Любая подсказка? - person Zo Has; 09.07.2010
comment
Он есть, но проблема осталась из-за двух параметров внутри одного блока (?+?). Что вы делаете в доступе, чтобы избежать наказания за это? Проверьте мое описание ошибки выше. - person Zo Has; 09.07.2010
comment
Бамп, у кого-нибудь есть опыт работы с OLEDB? - person Zo Has; 15.07.2010
comment
Оба операнда в выражении не могут быть маркерами параметров. Например, указав выражение вида: ? + ? не действует. Разве вы не можете добавить два значения вместо того, чтобы делать это в SQL? - person Chris Diver; 15.07.2010
comment
эй, я могу, но это потребует от меня объединения значений с запросом, например, где «+ (параметр1 + параметр2) +». Проблема в том, что я хочу связать параметры в форме параметризованного запроса. - person Zo Has; 15.07.2010