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

我试图从c#应用程序查询MySQL数据库。 下面是代码,这里我使用的是parameterized query

  public static void ValidateName(MySqlConnection conn,List 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 lineList = new List(); while (reader.Read()) { lineList.Add(reader.GetString(0)); } if (lineList.Count <=0) { WriteValidationFailure(EmpList[i], "Failed"); } } } 

但上面的代码在下面的行中说错误

  cmd.Parameters.Add("@Group", MySqlDbType.VarChar).Value = Group; 

MySql.Data.dll’@Group中发生了’MySql.Data.MySqlClient.MySqlException’类型的未处理exception已经定义

发生这种情况是因为您在每次迭代中添加了相同的参数集。 您可以在每次迭代中清除,也可以在开始循环之前添加它们,并在每次迭代期间更改现有参数的值。 我认为第二种选择会很棒。 我必须在这里指定的另一件事是读者,你必须使用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 } } }