首页 > 解决方案 > 检测 SqlDataAdapter 填充方法何时完成

问题描述

我有一个SqlDataAdapter服务于多个 SqlCommand 的全局变量。问题有时是SqlDataAdapter填充方法会引发错误说

There is already an open DataReader associated with this Command...

我想知道是否存在某种方法可以知道填充方法何时仍在执行?

我听说 SqlDataAdapter 在DataReader内部使用 a 。

能得到DataReader吗?

标签: datatablefillsqldataadapter

解决方案


“我有一个全局 SqlDataAdapter” ——那是你的错误。摒弃这个概念,并在您想要使用的时候创建一个 DataAdapter。把它放在一个using声明中,这样你就不会忘记处理它。

此外,如果您正在缓存连接并手动打开关闭它们,也不要这样做 - 只需给适配器(您在现场制作的)一个 SQL 字符串和一个连接字符串,让它创建连接和命令对象。您唯一可能想要创建一个连接并自己打开它的情况是,如果您有很多操作要使用不同的适配器按顺序执行,可能作为事务的一部分。不要忘记打开和关闭连接并不一定与数据库建立 TCP 连接(慢) - 它是从连接池中租用并返回当前连接且可用的连接,并且是一个微不足道的操作

您尝试和微观管理的次数越多,它就会变得越糟,并且试图四处晃动,检测到这一点并等待那是a)不必要的,b)尝试在您将自己描绘成的角落里工作的混乱局面,c ) 将提供不合标准的 UI 体验。


推荐阅读