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

最も可能性の高いものは、、、、、、またはのいずれかが少なくとも1つであるgrp.Group_idというgrp.Dep_codeことgrp.Dep_yearです。値を持つパラメータ値は送信されません; 次のように書き直すことができます。grp.Dep_namegrp.Boss_codegrp.Boss_namenullgrpnull

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

など(つまり、それぞれについて); nullこれにより、そのような値のデータベース(C#とは異なります)が渡さnullれます。

私がやろうとしている2番目のことは、単一のコマンドインスタンスを再利用することです。

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 に答える