1

Devart Oracleアダプターを試していますが、OracleのDataAccessDLLで機能する既存のコードに問題があります。次のエラー例が表示されcommand.ExecuteNonQuery()ます。

ORA-01400:("DatabaseName"。"table_name"。"col3")にNULLを挿入できません

次にいくつかのサンプルコードを示します。

const string query = @"INSERT INTO table_name (table_name_id, col1, col2, col3)
    VALUES(table_name_id_seq.nextval, :col1, :col2, :col3)
    RETURNING table_name_id INTO :output_id";
OracleParameter outputParam = new OracleParameter(":output_id", OracleDbType.Long, ParameterDirection.Output);
OracleParameter[] parameters = new OracleParameter[]
{
    outputParam,
    new OracleParameter(":col1", OracleDbType.VarChar, col1, ParameterDirection.Input),
    new OracleParameter(":col2", OracleDbType.VarChar, col2, ParameterDirection.Input),
    new OracleParameter(":col3", OracleDbType.Long, col3, ParameterDirection.Input)
}

using (OracleCommand command = connection.CreateCommand())
{
    command.CommandText = query;
    command.CommandType = CommandType.Text;
    command.Parameters.AddRange(parameters);
    command.ExecuteNonQuery();
    int outputId = Convert.ToInt32(outputParam.Value.ToString());
}

何が間違っているのですか?PKのシーケンスを使用して行を挿入し、その行のPKをすべて1つのクエリで返そうとしています。

また、クエリの出力パラメータと戻り行を削除すると、クエリは正常に実行されます。

4

1 に答える 1

0

ご報告ありがとうございます。問題を再現し、調査中です。回避策として、ダイレクト モードに切り替えてください: http://www.devart.com/dotconnect/oracle/docs/?directmode.html

于 2013-02-12T16:06:17.433 に答える