Sql datareader已经与高频轮询相关联

时间:2016-03-31 13:46:52

标签: c# mysql

我有一块代码,每隔约0.25秒执行一次。它在前十次迭代中工作正常,直到它与“已经与此连接相关联的Datareader”错误崩溃,尽管事实上我每次关闭正在使用的数据读取器。请求的速度可能导致这种情况吗?我把它放慢到每1.5秒执行一次,它仍然发生了。这个连接在其他任何地方使用都禁止这个块,所以我不确定它为什么会发生。

            MySqlCommand cmd = new MySqlCommand(QueryString, connection);
            var dataReader = cmd.ExecuteReader();
            var dt = new DataTable();
            dt.Load(dataReader);
            dataReader.Close();
            dataReader.Dispose();
            cmd.Dispose();

2 个答案:

答案 0 :(得分:0)

最有可能的是,两个操作在某个时刻同时运行。由于您为每个连接使用相同的连接,因此会遇到并发问题 - 默认情况下,一个连接仅支持单个打开的游标。所有需要发生的事情是数据库查询花费的时间超过了计时器间隔。

添加同步以确保两个请求不会同时运行 - 如果已有请求未决,则立即返回。

此外,请务必正确使用usingtry ... finally - 异常可能会阻止dataReader.Dispose()运行,从而保持连接在读取器被GC和终结器丢弃之前,无法打开任何新游标。

答案 1 :(得分:0)

为datareader和ExecuteNonQuery使用不同的连接