2013-10-09 6 views
0
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 [email protected]"; 
     cmd4.CommandText = "update TrackingFaculty_det SET [email protected] WHERE [email protected] "; 
     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.netSql выполнение запроса внутри для цикла

Проблема возникает, если всякий раз, когда 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.. Любое решение для этого?

+0

Используйте 'SP и TableValueParameters' или просто не повторно использовать команду –

+1

Очистить параметры cmd4 после' cmd4.ExecuteNonQuery (), ' –

ответ

3

Просто переместите инвариантную часть цикла за пределы цикла. Это означает, что инициализация SqlCommand, открытие соединения и создание коллекции параметров.
Затем внутри цикла просто измените значение параметров и выполните. (Это будет всегда быстрее, чем воссоздавать тот же список параметров внутри цикла)

SqlCommand cmd4 = new SqlCommand("update TrackingFaculty_det " + 
            "SET [email protected] WHERE [email protected]", 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(); 
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»

Очистить ваш paramters перед добавлением еще раз тот же параметров

cmd4.Parameters.Clear(); 
+0

, пожалуйста, уточните это? –

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); 
Смежные вопросы