从gridview插入数据到for循环

时间:2012-04-07 07:57:07

标签: c# asp.net sql

我从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();
            }

第一行只插入数据库......

2 个答案:

答案 0 :(得分: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();
        }

希望这会帮助你....快乐的编码..

答案 1 :(得分: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();
            }