c# - 在打开的 DataReader 中执行另一个 MySQL 语句

标签 c# mysql sql wpf

我的 WPF 应用程序使用 MySQL 连接来处理数据库。我有一个特定的查询,用于检查我的输入信息是否具有数据库中已存在的唯一 ID。如果是,那么我什么都不用做,但如果不是,我需要在那里插入一条新记录。 下面是我的代码。问题是在我尝试创建和执行新命令的最后一个 using 语句中,我收到一条错误消息“此连接中已经存在一个打开的 DataReader。”

从表面上看,我需要建立一个不同的连接并改用它,但是是否有解决方法可以改用当前连接?

 using (MySqlCommand checkCmd = con.CreateCommand())
 {
     checkCmd.CommandText = "SELECT id FROM table WHERE id = @RFID";
     checkCmd.Parameters.AddWithValue("RFID", myValue);

     using (MySqlDataReader reader = checkCmd.ExecuteReader())
     {
         //if not found, then insert the new value in the database
         if (!reader.Read())
         {
              using (MySqlCommand cmd = con.CreateCommand())
              {
                  //try to create and execute insert query here
              }
         }
     }
}

最佳答案

在您的示例中,您可以简单地关闭阅读器并进行插入;

bool found;

using (MySqlCommand checkCmd = con.CreateCommand())
{
    checkCmd.CommandText = "SELECT id FROM table WHERE id = @RFID";
    checkCmd.Parameters.AddWithValue("RFID", myValue);

    using (MySqlDataReader reader = checkCmd.ExecuteReader())
    {
        found = reader.Read();
    }
}

if(!found) {
    using (MySqlCommand cmd = con.CreateCommand())
    {
        //try to create and execute insert query here
    }
}

如果 id 应该是唯一的,另一个可能的选择是根本不进行选择,只需在 id 上设置唯一索引并使用 INSERT IGNORE 插入该行(如果该行尚不存在)。

关于c# - 在打开的 DataReader 中执行另一个 MySQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23664681/

相关文章:

php - 无法使用 laravel Eloquent 地获取数据

javascript - mySQL 没有将数组返回到 angularJS 中

mySql - 如何使用条件计数进行选择,一个表中的 X 项与另一个表中的记录相关

c# - OnMessage 事件不会在 Telegram.Bot 包中触发

c# - 注册免费 COM - 隔离 COM 引用 - 缺少值 '(Default)'

c# - Silverlight 用户控件的句柄

php - 如何查询和排列两个相似的表

c# - 使用 ViewstateUserKey 属性保护 View 状态

mysql - 如果特定列值不同则更新行,否则插入新行

sql - SQL Server 2008 上缺少结束注释标记 "*/"错误,而不是 2005