【问题标题】:IBM.Data.DB2.iSeries idb2Command crash when insert parameter with empty string插入带有空字符串的参数时,IBM.Data.DB2.iSeries idb2Command 崩溃
【发布时间】:2026-01-09 20:55:01
【问题描述】:
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);
                        }


                    }
                }

执行命令 ExecuteNonQuery 时,控制台应用程序停止且没有错误 如果我省略了 iDb2Char 参数或这些参数包含任何单个字符(甚至空格),那么该命令将成功运行。问题是当我通过 String.Empty 有什么想法吗?

【问题讨论】:

    标签: c# db2 db2-400 iseries-navigator


    【解决方案1】:

    我猜你得到的不是iDB2SQLErrorException

    试试这个:

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

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

    【讨论】:

    • 不,不只是visual studio的IDE站
    • 你的意思是ExecuteNonQuery永远不会回来?
    • 如果我处于调试模式,ExecuteNonQuery 会停止 Visual Studio 调试模式,如果我从控制台可执行应用程序运行它,则不会发生任何事情
    • 如果您将 SqlCommand.CommandTimeout 设置为一个较短的值,例如 5(秒),您会收到超时异常吗?
    • 什么都不会立即停止