0

datatable からデータを挿入すると、次のエラーが発生しました。表示されるエラーは、変数名 '@ndate1' は既に宣言されています。変数名は、クエリ バッチまたはストアド プロシージャ内で一意である必要があります。.net の新機能です。どうすればこのエラーを修正できますか? このエラーを修正するのを手伝ってください..

私の頭文字コードはここにあります..

            for (int i = 0; i <= DT.Rows.Count; i++)
            {
                //sqlcmd.Parameters.Add("@company", SqlDbType.NVarChar).Value = Convert.ToString(dr["company"]);
                sqlcmd.CommandText = @" Insert into tbl_rtdata (fld_date,fld_dtcode,fld_company,fld_primary,fld_sales,fld_balance)
               values (@ndate1,@dtcode1,@company1,@billing1,@sales1,@balance1)";
                sqlcmd.Parameters.AddWithValue("@ndate1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["ndate"]);
                sqlcmd.Parameters.AddWithValue("@dtcode1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["dtcode"]);
                sqlcmd.Parameters.AddWithValue("@company1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["company"]);
                sqlcmd.Parameters.AddWithValue("@billing1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["billing"]);
                sqlcmd.Parameters.AddWithValue("@sales1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["sales"]);
                sqlcmd.Parameters.AddWithValue("@balance1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["balance"]);


                sqlcmd.ExecuteNonQuery();
            }

最初の行のみがデータベースに挿入されました...

4

2 に答える 2

0

sqlcmd.Parameters.Clearそれ以外の場合は、最初のループからのパラメーター コレクションを維持するだけです。

  for (int i = 0; i <= DT.Rows.Count; i++)
            {
                sqlcmd.Parameters.Clear();
                sqlcmd.CommandText = @" Insert into tbl_rtdata (fld_date,fld_dtcode,fld_company,fld_primary,fld_sales,fld_balance)
               values (@ndate1,@dtcode1,@company1,@billing1,@sales1,@balance1)";
                sqlcmd.Parameters.AddWithValue("@ndate1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["ndate"]);
                sqlcmd.Parameters.AddWithValue("@dtcode1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["dtcode"]);
                sqlcmd.Parameters.AddWithValue("@company1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["company"]);
                sqlcmd.Parameters.AddWithValue("@billing1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["billing"]);
                sqlcmd.Parameters.AddWithValue("@sales1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["sales"]);
                sqlcmd.Parameters.AddWithValue("@balance1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["balance"]);


                sqlcmd.ExecuteNonQuery();
            }
于 2012-04-07T08:42:22.800 に答える
0

以下のようにコードを変更します。

for (int i = 0; i <= DT.Rows.Count; i++)
        {

            sqlcmd = new SqlCommand(); 
            sqlcmd.Connection = objconn;

            //sqlcmd.Parameters.Add("@company", SqlDbType.NVarChar).Value = Convert.ToString(dr["company"]);
            sqlcmd.CommandText = @" Insert into tbl_rtdata (fld_date,fld_dtcode,fld_company,fld_primary,fld_sales,fld_balance)
           values (@ndate1,@dtcode1,@company1,@billing1,@sales1,@balance1)";
            sqlcmd.Parameters.AddWithValue("@ndate1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["ndate"]);
            sqlcmd.Parameters.AddWithValue("@dtcode1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["dtcode"]);
            sqlcmd.Parameters.AddWithValue("@company1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["company"]);
            sqlcmd.Parameters.AddWithValue("@billing1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["billing"]);
            sqlcmd.Parameters.AddWithValue("@sales1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["sales"]);
            sqlcmd.Parameters.AddWithValue("@balance1", SqlDbType.NVarChar).Value = Convert.ToString(DT.Rows[i]["balance"]);


            sqlcmd.ExecuteNonQuery();
        }

これがあなたの助けになることを願っています....幸せなコーディング..

于 2012-04-07T08:05:59.323 に答える