IBM.Data.DB2.iSeries idb2 插入带有空字符串的参数时命令崩溃


var ibmConnnectionString = "DataSource=10.12.61.12;Naming=SQL;LibraryList=LINSYS;UserID=*****;Password=*****;";
using (iDB2Connection db2Conn = new iDB2Connection(ibmConnnectionString))
{
db2Conn.Open();
//  using (iDB2Transaction trans = db2Conn.BeginTransaction())
{
using (iDB2Command cmd = db2Conn.CreateCommand())
{
// cmd.Transaction = trans;
cmd.CommandText = @"INSERT INTO LINSYS.ALENBN (
POLNUM, FEDRNUM, BENFCD, BNSURN, BNNAME, BNFANM, CSBRDT, BNPART, CSADT)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8)";
cmd.DeriveParameters();
cmd.Parameters["@p0"].Value = 148690; //iDB2Numeric
cmd.Parameters["@p1"].Value = 11001; //iDB2Numeric
cmd.Parameters["@p2"].Value = 99;    //iDB2Numeric                     
cmd.Parameters["@p3"].Value = String.Empty; //iDB2Char Not NULL Default ('')
cmd.Parameters["@p4"].Value = String.Empty; //iDB2Char Not NULL Default ('')
cmd.Parameters["@p5"].Value = String.Empty; //iDB2Char Not NULL Default ('')
cmd.Parameters["@p6"].Value = 0; //iDB2Numeric
cmd.Parameters["@p7"].iDB2Value = 100M;//iDB2Numeric
cmd.Parameters["@p8"].iDB2Value = String.Empty; //iDB2Char Not NULL Default ('')
try
{
cmd.ExecuteNonQuery();
}
catch(iDB2SQLErrorException ex)
{
Console.WriteLine(ex);
}

}
}

执行命令执行非查询时,控制台应用停止,没有错误 如果我省略 iDb2Char 参数或这些参数包含任何单个字符(甚至空格(,则该命令将成功运行。问题是当我传递字符串时 知道吗?

我的猜测是你得到了一个非iDB2SQLErrorException.

试试这个:

try
{
cmd.ExecuteNonQuery();
}
catch(iDB2SQLErrorException ex)
{
Console.WriteLine(ex);
}
catch(Exception ex)
{
Console.Writeline(ex);
}

然后,如果有任何异常,您将知道问题所在。 这可能是字段不允许 0 长度字符串,并且由于某种原因它抛出ArgumentOutOfRangeException.

最新更新