sqlexec进程收到的无效语句id

本文关键字:无效 语句 id 进程 sqlexec | 更新日期: 2023-09-27 18:03:30

我在插入(多行)期间面临以下问题:(一些记录被插入,并且在随机记录数之后我得到一个错误)!!

sqlexec进程收到的无效语句id。


  public static int InsertGroupDetails(List<GroupDetails> grp_det)
        {
            using (IfxConnection con = new IfxConnection(ConfigurationSettings.AppSettings["str_rm"].ToString()))
            {
                int affectedRow = -1;
                StringBuilder cmdTxt = new StringBuilder();
                cmdTxt.Append(" INSERT INTO rdm_groupdetails(group_id,dep_code,dep_year,dep_name,boss_num,boss_name) VALUES (?, ?, ?, ?, ?, ? ) ");
                foreach (GroupDetails grp in grp_det)
                {
                    if (con.State == ConnectionState.Closed)
                    {
                        con.Open();
                    }

                    IfxCommand myIfxCmd = new IfxCommand(cmdTxt.ToString(), con);
                    myIfxCmd.CommandType = CommandType.Text;
                    myIfxCmd.Parameters.Clear();
                    myIfxCmd.Parameters.Add("group_id", grp.Group_id);
                    myIfxCmd.Parameters.Add("dep_code", grp.Dep_code);
                    myIfxCmd.Parameters.Add("dep_year", grp.Dep_year);
                    myIfxCmd.Parameters.Add("dep_name", grp.Dep_name);
                    myIfxCmd.Parameters.Add("boss_num", grp.Boss_code);
                    myIfxCmd.Parameters.Add("boss_name", grp.Boss_name);
                    affectedRow = myIfxCmd.ExecuteNonQuery();

                }
                con.Close();
                con.Dispose();
                return affectedRow;
            }
        }

sqlexec进程收到的无效语句id

最可能的事情是grp.Group_id, grp.Dep_code, grp.Dep_year, grp.Dep_name, grp.Boss_codegrp.Boss_name中至少有一个grpnull。带有null的参数值不发送;您可以重写为:

myIfxCmd.Parameters.Add("group_id", ((object)grp.Group_id) ?? DBNull.Value);

等(即每一个);这将为任何这样的值传递一个数据库null(不同于c# null)。

我要做的第二件事是重用单个命令实例:

using(var myIfxCmd = new IfxCommand(cmdTxt.ToString(), con))
{
    myIfxCmd.CommandType = CommandType.Text;
    // declare parameters (without values; note you might need to declare types)
    var id = myIfxCmd.Parameters.Add("group_id");
    // ... times 6
    if (con.State == ConnectionState.Closed)
    {
        con.Open();
    }
    foreach (GroupDetails grp in grp_det)
    {
        // assign parameter values for this iteration
        id.Value = ((object)grp.Group_id) ?? DBNull.Value;
        // ... times 6
        myIfxCmd.ExecuteNonQuery();
    }
}