如何关闭活动的datareader c#

时间:2017-12-06 21:08:52

标签: c# mysql

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

1 个答案:

答案 0 :(得分:1)

ExecuteReader上使用DbCommand时,您获得的读者是 - 即它实现IDisposable。您应该使用using块来使用它。然后:当你的代码离开块时,一切都会自动发生:

using(var reader = cmd.ExecuteReader())
{
    // ... consume the data
}

或者,使用像“Dapper”(免费等)这样的工具来为您正确地执行此操作,并使编写ADO.NET变得更容易。