在MySql.Data.dll中发生了MySql.Data.MySqlClient.MySqlException

时间:2017-03-14 04:25:30

标签: c# mysql

我正在尝试从parameterized query应用程序查询 public static void ValidateName(MySqlConnection conn,List<Employee> EmpList, string Group) { string selectQuery = "Select Name from Employee where Group = @Group AND @Name in (FirstName, LastName);"; using (MySqlCommand cmd = new MySqlCommand(selectQuery, conn)) { for (int i = 0; i < EmpList.Count; i++) { cmd.Parameters.Add("@Group", MySqlDbType.VarChar).Value = Group; cmd.Parameters.Add("@Name", MySqlDbType.VarChar).Value = EmpList[i].Name; var reader = cmd.ExecuteReader(); List<string> lineList = new List<string>(); while (reader.Read()) { lineList.Add(reader.GetString(0)); } if (lineList.Count <=0) { WriteValidationFailure(EmpList[i], "Failed"); } } } 数据库。下面是代码,我在这里使用 cmd.Parameters.Add("@Group", MySqlDbType.VarChar).Value = Group;

<defs>

但是上面的代码在下面写错误

var labels = svg.selectAll("foo")
    .data(data)
    .enter()
    .append("g")
    .classed("labels", true);
  

“MySql.Data.MySqlClient.MySqlException”类型的未处理异常   发生在MySql.Data.dll'@Group已经定义

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您在每次迭代中添加了相同的参数集。您可以在每次迭代中清除,也可以在开始循环之前添加它们,并在每次迭代期间更改现有参数的值。我认为第二种选择会很棒。我必须在这里指定的另一件事是关于读者,你必须使用reader作为使用变量,这样每次它都会被放置在using块的末尾,你的代码工作正常。这意味着您可以尝试这样的事情:

using (MySqlCommand cmd = new MySqlCommand(selectQuery, conn))
{
    cmd.Parameters.Add(new MySqlParameter("@Group", MySqlDbType.VarChar));
    cmd.Parameters.Add(new MySqlParameter("@Name", MySqlDbType.VarChar));
    for (int i = 0; i < EmpList.Count; i++)
    {
        cmd.Parameters["Group"].Value = group;
        cmd.Parameters["Name"].Value = EmpList[i].Name;
        // rest of code here
       using (MySqlDataReader reader = cmd.ExecuteReader())
       {
           // Process reader operations 
       }

    }
}