变量名@IdLiquidacion已经声明。变量名在查询批处理或存储过程中必须是唯一的。

时间:2018-04-27 16:06:52

标签: asp.net

在数据库中插入信息时出现以下问题

public void Insertar()
{
   SqlConnection con = new SqlConnection();
   con.ConnectionString = "Data Source=BD-DLLO-SP2016;Initial Catalog=GobernacionCesar;Integrated Security=True";

   con.Open();

   string query = "INSERT INTO Liquidacion (IdLiquidacion, IdPeriodo, FechaGeneracion, Usuario) VALUES(@IdLiquidacion, @IdPeriodo, @FechaGeneracion, @Usuario)";

   SqlCommand com1 = new SqlCommand(query, con);

   foreach (GridViewRow gridRow in GridView4.Rows)
   {
       Iniciar();
       com1.Parameters.AddWithValue("@IdLiquidacion", A);
       com1.Parameters.AddWithValue("@IdPeriodo", cell);
       com1.Parameters.AddWithValue("@FechaGeneracion", DateTime.Now.ToString());
       com1.Parameters.AddWithValue("@Usuario", gridRow.Cells[0].Text);

       com1.ExecuteNonQuery();
   }

   con.Close();
   return;
}

3 个答案:

答案 0 :(得分:0)

移动命令

SqlCommand com1 = new SqlCommand(query, con);

到循环的开头:

foreach (GridViewRow gridRow in GridView4.Rows)
{
    SqlCommand com1 = new SqlCommand(query, con);
    ....
}

答案 1 :(得分:0)

你应该

  • 定义循环
  • 的参数
  • 设置循环内参数的值

像这样:

SqlCommand com1 = new SqlCommand(query, con);

// define parameters - you need to adapt the datatypes - I was only guessing
com1.Parameters.Add("@IdLiquidacion", SqlDbType.Int);
com1.Parameters.Add("@IdPeriodo", SqlDbType.VarChar, 50);
com1.Parameters.Add("@FechaGeneracion", SqlDbType.DateTime);
com1.Parameters.Add("@Usuario", SqlDbType.VarChar, 100);

foreach (GridViewRow gridRow in GridView4.Rows)
{
   Iniciar();

   // inside the loop, only SET the values
   com1.Parameters["@IdLiquidacion"].Value = A;
   com1.Parameters["@IdPeriodo"].Value = cell;
   com1.Parameters["@FechaGeneracion"].Value = DateTime.Now;
   com1.Parameters["@Usuario"].Value = gridRow.Cells[0].Text;

   com1.ExecuteNonQuery();
}

答案 2 :(得分:-1)

您正在循环中添加参数。如果在添加之前清除它们,这应该可行。