1
for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
{
    string toemail = GridView1.Rows[i].Cells[2].Text;
    string FID1 = GridView1.Rows[i].Cells[0].Text;
    GridViewRow row = GridView1.Rows[i];
    CheckBox Ckbox = (CheckBox)row.FindControl("CheckBoxMark1");
    if (Ckbox.Checked == true)
    {
        sendMail(toemail);

        //ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Email send Succesfully')</script>");
        ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('Email sent Succesfully on " + test + "')</script>");

        cn1.Open();
       //cmd4.CommandText = "Insert into TrackingFaculty_det  (EmailsentDate)  values (@EmailsentDate) WHERE FID=@FID";
       cmd4.CommandText = "update TrackingFaculty_det SET EmailsentDate=@Email WHERE FID=@FID  ";
       cmd4.CommandType = CommandType.Text;
       cmd4.Connection = cn1;

       cmd4.Parameters.Add("@Email", SqlDbType.DateTime, 8);
       cmd4.Parameters["@Email"].Value = sdt;
       cmd4.Parameters.Add("@FID",SqlDbType.VarChar,10);
       cmd4.Parameters["@FID"].Value = FID1;
       cmd4.ExecuteNonQuery();
       cn1.Close();
    }
}

//这是c#代码的一部分asp.net

如果无论何时for loop执行都updation应该在 中完成,database但当for loop执行多次时,update查询将给出错误,则出现The variable name '@Email' has already been declared. Variable names must be unique within a query batch or stored procedure.问题。对此有任何解决方案吗?

4

4 回答 4

4

只需将循环的不变部分移到循环之外。这意味着,SqlCommand 的初始化、连接的打开和参数集合的创建。
然后在循环内只需更改参数的值并执行。(这总是比在循环内重新创建相同的参数列表更快)

   SqlCommand cmd4 = new SqlCommand("update TrackingFaculty_det " + 
                                    "SET EmailsentDate=@Email WHERE FID=@FID", cn1);
   cn1.Open();
   cmd4.Parameters.Add("@Email", SqlDbType.DateTime, 8);
   cmd4.Parameters.Add("@FID",SqlDbType.VarChar,10);
   for (int i = 0; i <= GridView1.Rows.Count - 1; i++)
   {
       .....
       if (Ckbox.Checked == true)
       {
          ....
          cmd4.Parameters["@Email"].Value = sdt;
          cmd4.Parameters["@FID"].Value = FID1;
          cmd4.ExecuteNonQuery();
       }
   }
   cn1.Close();
于 2013-10-09T10:04:27.927 回答
2

尝试清除命令参数 -

cmd4.Parameters.Clear();

然后添加参数

cmd4.Parameters.Add("@Email", SqlDbType.DateTime, 8);

所以你的最终代码是 -

cmd4.Parameters.Clear();  //  <- Just add this line
cmd4.Parameters.Add("@Email", SqlDbType.DateTime, 8);
于 2013-10-09T09:54:18.347 回答
1

检查以表数据为参数的运行存储过程

或第二个是在 sql server 中使用以下示例和 exec(string) 创建字符串

sqlstr= "update TrackingFaculty_det SET EmailsentDate=2@2.com WHERE FID=1; update TrackingFaculty_det SET EmailsentDate=1@1.com WHERE FID=@FID ;pdate TrackingFaculty_det SET EmailsentDate=2@2.com WHERE FID=1;"
于 2013-10-09T09:57:45.363 回答
1

cmd4 对象应每次刷新。

  cmd4.Parameters.Add("@Email", SqlDbType.DateTime, 8);
  cmd4.Parameters["@Email"].Value = sdt;
  cmd4.Parameters.Add("@FID",SqlDbType.VarChar,10);
  cmd4.Parameters["@FID"].Value = FID1;

您在“cmd4”的参数列表中多次添加相同的参数

在再次添加相同的参数之前清除您的参数

cmd4.Parameters.Clear();
于 2013-10-09T09:53:59.440 回答