我的 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/