0

C# で OdbcConnection を使用して DB2 データベースを操作しています。データベースによってスローされたSQL例外がキャッチされないのを見たことはありませんが、確かに、この発生に遭遇しました。私のprintステートメントによると、接続を開いたり閉じたりするステートメントは正常に機能します。コードを try/catch で囲み、try/catch 本体と例外本体のさまざまなポイントでログ ファイルに書き込みます。例外本文のログ ステートメントが書き込まれることはありません...ログのすべてのアカウントによって、データベースの挿入は正常に行われました...DB2 に関する限りではありませんでした。

ここに私が見ているトレースの興味深い部分があります:

[1380564032.174591 - 2013 年 9 月 30 日 13:00:32.174591] ( 未取得エラー メッセージ =「[IBM][CLI ドライバー][DB2/AIX64] SQL0407N NOT NULL 列への NULL 値の割り当て」TBSPACEID=2、TABLEID= 4、COLNO=7" は使用できません。SQLSTATE=23502

") [1380564032.186504 - 2013 年 9 月 30 日 13:00:32.186504]

最初は ExecuteScalar を使用していました。ExecuteNonQuery と ExecuteReader を試しました。すべてに同じエラーがあり、エラーが try/catch でキャッチされないという同じ問題があります。

考え?

編集1

コードは次のとおりです。

public void InsertRecord(MyObject entry)
{
    try
    {

        OpenConnection();

        // Prep command object.             
        using (OdbcCommand cmd = new OdbcCommand(Queries.InsertRecord, this.odbcCn))
        {
            cmd.CommandTimeout = 30;
            cmd.CommandType = CommandType.Text;

            //Force error testing
            entry.Zip = "9999999999999999999999999999999999999999999999999999999999999999";

            cmd.Parameters.Add(new OdbcParameter("@ZIP", ntry.Zip));

            object o = cmd.ExecuteReader(CommandBehavior.SingleResult);

            int id = -1;

            LogUtil.WriteCondensed("Insert to db succeeded. Id: " + id.ToString());
        }
    }
    catch (OdbcException e)
    {
        LogUtil.Write("INSERT ROW", "Exception occurred");
        CloseConnection();
        throw;
    }
    catch (Exception e)
    {
        LogUtil.Write("INSERT ROW","Exception occurred");
        CloseConnection();
        throw;
    }
    finally
    {
        CloseConnection();
    }

    return ;
}
4

1 に答える 1