我正在尝试从mySQL数据库中选择值。一切都很好,但第一次运行代码我忘了关闭datareader。现在,每次运行更新的代码时,都会出现错误,说明已经有一个必须首先关闭的连接的活动datareader。我已经尝试结束SQL实例以及重新启动我的PC,但错误仍然存在。如何关闭此datareader
以下是更新后的代码
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;
}
答案 0 :(得分:1)
在ExecuteReader
上使用DbCommand
时,您获得的读者是 - 即它实现IDisposable
。您应该使用using
块来使用它。然后:当你的代码离开块时,一切都会自动发生:
using(var reader = cmd.ExecuteReader())
{
// ... consume the data
}
或者,使用像“Dapper”(免费等)这样的工具来为您正确地执行此操作,并使编写ADO.NET变得更容易。