簡體   English   中英

多次使用同一變量插入語句

[英]Insert Statement Using Same Variable Multiple Times

需要將幾個浮動教師分配給數據庫中的多個班級。 該語句出錯, Error of the variable name @Teacher has already been declared. Variable names must be unique wihtin a query batch or stored procedure Error of the variable name @Teacher has already been declared. Variable names must be unique wihtin a query batch or stored procedure

這是我的語法。 我應該做些什么改變才能做到這一點:

private void btnOne_Click()
{
string insertstatement = "INSERT INTO tbl_TeacherInfo (Teacher,Grade) VALUES (@Teacher, @Grade)";

using (SqlConnection conn = new SqlConnection(connString))
{
    using (SqlCommand comm1 = new SqlCommand(insertstatement, conn))
    {
        conn.Open();
        comm1.CommandText = insertstatement;
        comm1.Parameters.AddWithValue("@Teacher", "Mrs Hart");
        comm1.Parameters.AddWithValue("@Grade", "1st");
        comm1.Parameters.AddWithValue("@Teacher", "Mrs Hart");
        comm1.Parameters.AddWithValue("@Grade", "2nd");
        comm1.Parameters.AddWithValue("@Teacher", "Mrs Hart");
        comm1.Parameters.AddWithValue("@Grade", "3rd");
        comm1.Parameters.AddWithValue("@Teacher", "Mrs Hart");
        comm1.Parameters.AddWithValue("@Grade", "4th");
        comm1.Parameters.AddWithValue("@Teacher", "Mrs Hart");
        comm1.Parameters.AddWithValue("@Grade", "5th");
        comm1.ExecuteNonQuery();
        conn.Close();
    }
}
}
var teacher = "Mrs Hart";
var grades = new[]{ "1st", "2nd", "3rd", "4th", "5th" };
var sql = "INSERT INTO tbl_TeacherInfo (Teacher,Grade) "
        + "VALUES (@Teacher, @Grade)";

using (var conn = new SqlConnection(/* connectionString */))
{
  conn.Open(); // Open once and share it

  // share the command
  using (var cmd = new SqlCommand(sql, conn))
  {
    // assign the shared value across all queries, and
    // add a placeholder for the revolving parameter
    cmd.Parameters.AddWithValue("@Teacher", teacher);
    cmd.Parameters.AddWithValue("@Grade", String.Empty); // placeholder

    // iterate over the grades (1st, 2nd, etc.)
    foreach (var grade in grades)
    {
      cmd.Parameters["@Grade"].Value = grade; // change @Grade
      cmd.ExecuteNonQuery(); // Execute with these two values
    }
  }

  conn.Close(); // cleanup
}

您的錯誤是@Teacher分配具有相同名稱( @Teacher@Grade )的參數。 我建議創建一個單獨的方法,該方法接受兩個參數( teachergrade ),並將一條記錄插入到tbl_TeacherInfo ,如下所示

private void InsertRecord(string teacher, string grade)
{
    string insertstatement = "INSERT INTO tbl_TeacherInfo (Teacher,Grade) VALUES (@Teacher, @Grade)";

    using (SqlConnection conn = new SqlConnection(connString))
    {
        using (SqlCommand comm1 = new SqlCommand(insertstatement, conn))
        {
            conn.Open();
            comm1.Parameters.AddWithValue("@Teacher", teacher);
            comm1.Parameters.AddWithValue("@Grade", grade);
            comm1.ExecuteNonQuery();
            conn.Close();
        }
    }
}

然后在btnOne_Click方法中調用上述方法

private void btnOne_Click()
{
    InsertRecord("Mrs Hart", "1st");
    InsertRecord("Mrs Hart", "2nd");
    InsertRecord("Mrs Hart", "3rd");
    InsertRecord("Mrs Hart", "4th");
    InsertRecord("Mrs Hart", "5th");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM