1

我在插入过程中遇到以下问题(多行):(插入了一些记录,在随机数量的记录之后我得到一个错误)!

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;
            }

        }
4

1 回答 1

2

最可能的情况是grp.Group_id, grp.Dep_code, grp.Dep_year,或grp.Dep_name中的一个至少用于一个。不发送带值的参数值;你可能会重写:grp.Boss_codegrp.Boss_namenullgrpnull

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();
    }
}
于 2013-03-11T09:35:50.933 回答