2011-05-04 33 views
0

我有一个正在建设使用ODP.NET,由于某种原因一直返回“ORA-01401参数化的插入查询一个C#功能:插入对于列“异常值太大。ODP.NET的InsertCommand错误地返回ORA-01401:插入的值太大,

我已经彻底检查有问题的字符串变量的长度,它属于很好的数据库列的最大大小之下(70个字符长在1024个字符长的VARCHAR2列)。奇怪的是,如果我将值作为字符串而不是参数变量插入,插入就可以正常工作。下面的代码(参数):

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,我现在遇到一个错误。我在我的服务器上使用Oracle.DataAccess的9.2.0.7版本。有任何想法吗?

回答

0

我只是稍微修改了一下代码就可以使用它,但我没有收到与您相同的异常。

我做的唯一变化是添加“进”入INSERT语句以及双引号中添加采集项目paramater名。


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具有约束力的位置在默认情况下,不具约束力BY名称(如旧oraClient女士所做的那样)引起的。

您可以验证参数确实是在正确的位置或者干脆:

oda.InsertCommand.BindByName = true ; 

心连心

+0

是的,这也正是它,我完全忽略的位置问题的结合。而且我们本周刚刚从System.Data.OracleClient切换,所以这就是为什么它现在只能咬我。非常感谢您的帮助! – GVIrish 2011-05-04 20:37:08