2017-02-21 23 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

Chrisさん、ありがとうございました。私はそのデフォルト値を推測したことはありません。 – EricksonG

0

属性のサイズを4として定義したデータベースの作成に戻ります。テーブルを変更してそれを増やします。

関連する問題