【问题标题】:MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dllMySql.Data.MySqlClient.MySqlException'发生在 MySql.Data.dll
【发布时间】:2017-03-14 04:25:29
【问题描述】:

我正在尝试从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;

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

【问题讨论】:

    标签: c# mysql


    【解决方案1】:

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

    【讨论】:

    • 是否需要添加 cmd.Prepare();在每个 cmd.Pramaters.value 之前,它会提高代码的性能
    • 如果使用 prepare 语句会提高性能,请给我建议
    • @xyz:希望this thread能解释清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-30
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    相关资源
    最近更新 更多