2012-04-07 3 views
0

Я получаю следующую ошибку для вставки данных из datatable. Отображаемая ошибка. Имя переменной '@ ndate1' уже объявлено. Имена переменных должны быть уникальными в рамках пакета запросов или хранимой процедуры. я новый для .net. Как я могу исправить эту ошибку, пожалуйста, помогите мне исправить эту ошибку ..вставить данные из gridview through for loop

Мой parital код здесь ..

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

Первая строка только вставляется в базу данных ...

ответ

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

Надеется, что это поможет .... счастливого кодирование ..

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