ODP.NET InsertCommand错误返回ORA-01401:插入的值对于列来说太大



我有一个c#函数,它正在使用ODP构造一个参数化的插入查询。. NET中由于某种原因一直返回"ORA-01401:插入的值对于列来说太大"异常。

我已经彻底检查了所讨论的字符串变量的长度,它远远低于数据库列的最大大小(在1024字符长的Varchar2列中有70字符长)。更奇怪的是,如果我将值作为字符串而不是参数变量插入,插入工作得很好。下面是代码(参数化):

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中遗漏了一些东西。或者ODP实际上有一个错误。我遇到的。NET。我使用Oracle的9.2.0.7版本。我的服务器上的数据访问。什么好主意吗?

我得到了这个工作,只是稍微修改你的代码,但我没有收到相同的异常作为你。

我所做的唯一更改是将"INTO"添加到INSERT语句中,并在add集合项中双引号引用参数名。


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默认按位置绑定而不是按名称绑定(就像旧的Ms oraClient那样)。

您可以验证参数确实在正确的位置,或者简单地:

oda.InsertCommand.BindByName = true ;

hth

最新更新