2017-02-21 86 views
0

我得到一個'ORA-12899 - 值太大了列(實際:5,最大值:4)「,我無法追查。我正在使用C#中的Oracle.ManagedDataAccess提供程序進行教科書參數化插入。有人看到過這樣的事嗎?Oracle.ManagedDataAccess ORA-12899 - 值太大的列

我們正在做的樣子:

var commandText = "insert into MyTable ([a ton of variables]) values(:A,:B,..........)"; 
using (OracleConnection connection = new OracleConnection(connectionString)) 
{ 
    connection.Open(); 
    using (OracleCommand command = new OracleCommand(commandText, connection)) 
    { 
     for (the ton of variables there are to insert whose values are in a collection) 
     command.Parameters.Add(theVariableName, theVariableValue); 
    } 
    command.ExecuteNonQuery(); 
} 

有什麼想法?我查了一些其他的答案,但沒有運氣。

+0

什麼是你不能追查?哪個輸入對於列太大? 'MyTable'中的列數據類型和大小是什麼?如果您不知道,請運行'define MyTable'查找。縮小它 - 哪一列是varchar2(4)(或者char(4)或number(4))? – mathguy

+0

原來是一個訂購問題。我想通過添加字段名稱順序無關緊要。事實證明它確實如此。請參閱下面的Chris的回答。 – EricksonG

回答

2

嘗試設置command.BindByName = true。

該問題可能與您在「(變量噸數...)」循環中添加參數的順序有關。 OracleCommand中的參數「BindByName」默認爲false,這意味着它將忽略您創建的OracleParameter中的變量名稱,並僅依賴於您添加它們的順序。因此,如果您的變量按順序添加,您肯定需要設置command.BindByName = true。

+0

謝謝克里斯,那是個問題。我永遠不會猜到這個默認值。 – EricksonG

0

回到創建數據庫的位置,您已將該屬性的大小定義爲4.更改表並增加該表。