ODP.NET InsertCommand ошибочно возвращает ORA-01401: вставленное значение слишком велико для столбца - PullRequest
0 голосов
/ 04 мая 2011

У меня есть функция C #, которая создает параметризованный запрос вставки с использованием ODP.NET, который по какой-то причине продолжает возвращать исключение «ORA-01401: вставленное значение слишком велико для столбца».

Я тщательно проверил длину рассматриваемой строковой переменной, и она значительно ниже максимального размера столбца базы данных (длина 70 символов в столбце Varchar2 длиной 1024 символа). Что странно, если я вставлю значение в виде строки, а не переменной параметра, вставка будет работать нормально. Вот код (параметризованный):

connectionString = GetConnectionString();
conn = new OracleConnection(connectionString);
OracleDataAdapter oda = new OracleDataAdapter();
conn.Open();
insertStatement = "INSERT INTO DOCS (ID, PATH, PAGES, USERID,SUFFIX, MASK) ";
insertStatement += "VALUES (:id, :itemUrl, 1, 'SHAREPOINT\\system',0,'000') ";
oda.InsertCommand = new OracleCommand(insertStatement, conn);
oda.InsertCommand.Parameters.Add(":id", docList[0].taskerID.ToString());
oda.InsertCommand.Parameters.Add(":itemUrl", itemUrl);
count += oda.InsertCommand.ExecuteNonQuery();

Я думаю, что, может быть, что-то мне здесь не хватает в ODP.NET или на самом деле есть ошибка в ODP.NET, с которой я сталкиваюсь. Я использую версию 9.2.0.7 Oracle.DataAccess на моем сервере. Есть идеи?

1 Ответ

0 голосов
/ 05 мая 2011

Я получил это для работы с небольшой модификацией вашего кода, но я не получил того же исключения, что и вы.

Единственное, что я сделал, это добавил INTO в оператор INSERT кака также двойные кавычки имен параметров в элементах добавления коллекции.


create table DOCS (id varchar2(70) , path varchar2(70) , pages number, userid varchar2(70) , suffix varchar2(70), mask varchar2(70));

OracleDataAdapter oda = new OracleDataAdapter();
insertStatement = "INSERT INTO DOCS (ID, PATH, PAGES, USERID,SUFFIX, MASK) ";
insertStatement += "VALUES (:id, :itemUrl, 1, 'SHAREPOINT\\system',0,'000') ";
conn.Open();
oda.InsertCommand =  new OracleCommand(insertStatement, conn);
oda.InsertCommand.Parameters.Add(":id", "test1");
oda.InsertCommand.Parameters.Add(":itemUrl", "test2");
count += oda.InsertCommand.ExecuteNonQuery();

Я думаю, у вас может быть что-то еще, что не видно в вашем образце.

Я знаю, что я получил вашу ошибку (много-много раз), когда у меня есть параметры в кардинальном порядке, которые отличаются от ожидаемого сбора параметров.

Это вызвано привязкой ODP по позиции по умолчанию ИНЕ связывать по имени (как это делала старая г-жа oraClient).

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

oda.InsertCommand.BindByName = true ;

hth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...