我正在尝试从 mySQL 数据库中选择值。一切都很好,但我第一次运行代码时忘记关闭数据读取器。现在,每次我运行更新后的代码时,它都会出错,指出该连接已经有一个事件的数据读取器,必须先关闭。我已尝试结束 SQL 实例并重新启动我的 PC,但错误仍然存在。如何关闭此数据读取器
下面是更新后的代码
public static int getProductIDbyName(string productName)
{
try
{
if (connection.State.ToString()!="Open")
{
connection.Open();
}
string query = "SELECT * FROM `tblproduct` WHERE `ProductName` = '"+productName+"'";
if (connection.State.ToString() == "Open")
{
int result = 0;
using (MySqlCommand cmd = new MySqlCommand(query, connection))
{
using (var dataReader = cmd.ExecuteReader())
{
while (dataReader.Read())
{
result = Convert.ToInt16(dataReader["ID"].ToString());
}
dataReader.Close();
}
}
connection.Close();
MySqlConnection.ClearAllPools();
return result;
}
}
catch (Exception)
{
throw;
}
return 0;
}
最佳答案
当您在 DbCommand
上使用 ExecuteReader
时,您获得的阅读器是一次性的 - 即它实现了 IDisposable
。您应该使用 using
block 来使用它。然后:当您的代码离开 block 时,一切都会自动发生:
using(var reader = cmd.ExecuteReader())
{
// ... consume the data
}
或者,使用“Dapper”(免费等)之类的工具,它可以为您正确执行此操作,并使编写 ADO.NET 变得更容易。
关于c# - 如何关闭事件的datareader c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47683472/