2011-05-04 51 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