我正在使用 C# 中的 OdbcConnection 处理 DB2 数据库。我从未见过数据库抛出的 sql 异常从未被捕获,但果然,我现在遇到了这种情况。根据我的打印语句,我打开和关闭连接的语句工作正常。我将代码包围在 try/catch 中,并在 try/catch 主体以及异常主体中的各个点写入日志文件。我在异常正文中的日志语句永远不会被写入……我的日志记录中的所有帐户,数据库插入都很好……只是就 DB2 而言它没有。
这是我看到的跟踪的一个有趣部分:
[1380564032.174591 - 09/30/2013 13:00:32.174591](未检索的错误消息=“[IBM][CLI 驱动程序][DB2/AIX64] SQL0407N 将 NULL 值分配给 NOT NULL 列“TBSPACEID=2,TABLEID= 4、COLNO=7”是不允许的。SQLSTATE=23502
") [1380564032.186504 - 09/30/2013 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 ;
}