c# - 如何关闭事件的datareader c#

标签 c# mysql

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

相关文章:

php - 如何从动态数组中提取变量并创建更新查询?

sql - 按用户获取未读消息

c# - httpWebRequest 下载并解析excel文件?

c# - 使用 string 和 string[] 时无法重载方法

C# 生成随机 IP 地址

mysql - 使用查询来确定表名

php - 无法返回多个 MySql 结果

c# - 如何将有符号字节数组转换为 float ?

c# - 如何从我创建的 .mdf 数据库进行备份

mysql - 如何在 MySql 中使用 sequelize 运行多个原始查询?