Что такое OracleType для ROWNUM?

Я пытаюсь параметризовать все наши существующие sql, но следующий код вызывает у меня проблему:

command.CommandText = String.Format("SELECT * FROM({0}) 
       WHERE ROWNUM <= :maxRecords", command.CommandText);
command.Parameters
       .Add("maxRecords", OracleType.Int32).Value = maxRecords;

Сообщение об ошибке: "ORA-01036: недопустимое имя / номер переменной".

Я предполагаю, что это потому, что OracleType.Int32 не является правильным типом данных для ROWNUM. Так что же это?

5 ответов

Решение

В SQLPlus мы можем создать представление, которое включает в себя rownum чтобы точно узнать, какой тип данных использует Oracle:

TEST>create view v_test as select rownum rn, dummy from dual;

View created.

TEST>desc v_test
 Name     Null?    Type
 -------- -------- -------------
 RN                NUMBER
 DUMMY             VARCHAR2(1)

Таким образом, для Oracle этот псевдостолбец является числом. На основании этой ссылки ( http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/datatype.htm) можно хранить:

The following numbers can be stored in a NUMBER column:

-Positive numbers in the range 1 x 10^-130 to 9.99...9 x 10^125 with up to 38 significant digits
-Negative numbers from -1 x 10^-130 to 9.99...99 x 10^125 with up to 38 significant digits
-Zero
-Positive and negative infinity (generated only by importing from an Oracle Database, Version 5)

Хороший вопрос. Вы пробовали: OracleType.UInt32? Я бы попробовал OracleType.Number в крайнем случае.

Я полагаю, что OracleType.Number будет работать, если тип данных является проблемой.

Извините всех, проблема не в типе данных. это потому, что объект команды используется более одного раза в коде метода для запуска другого sql с разными параметрами. Вызов command.Parameters.Clear() после того, как мой вызов решил проблему. Большое спасибо за понимание того, как найти DataType. Это будет полезно для дальнейшего использования.

Вам нужно использовать OracleType.RowID для Oracle rowID. Они не числа.

http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracletype.aspx

Это заявляет:

Строковое представление base64 типа данных Oracle ROWID. Используйте тип данных.NET Framework String или OracleClient OracleString в поле Значение.

Другие вопросы по тегам