惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
L
LangChain Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
D
Docker
WordPress大学
WordPress大学
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog
博客园 - Franky

博客园 - Zzx飘遥

发布一个注册类型库(TypeLib)的小工具 【软件发布】发布一个查单词的小工具 COM 入门(4) COM 入门(3) COM 入门(2) COM 入门(1) C#内嵌汇编代码的讨论 仿Win7显示桌面的工具 Deep Zoom Composer初探 ASP.NET VirtualPathProvider (下) Silverlight3离线运行 [译]理解Windows消息循环 WPF BitmapImage与byte[]的转换 VC++中启用XP主题外观 C#4.0初探:dynamic 关键字 - Zzx飘遥 - 博客园 四个字节整型转换为IP格式 - Zzx飘遥 - 博客园 拯救开启桌面效果后白屏的openSUSE 软件更新:网页设计师必备 之 网站截图工具 (附源码) C#4.0初探: Optional and named parameters
遭遇SqlDataReader锁定表
Zzx飘遥 · 2009-03-29 · via 博客园 - Zzx飘遥

一个数据表,按一定的筛选条件进行检索,检索结果用SqlDataReader逐条读取数据,对检索到的结果进行处理后更新数据库,使其不再符合上述的筛选条件。
当数据表的数据量比较小时,运行正常;当符合条件的数据量较大时(1W多/这个数据与表的结构、表内总数据量、机器性能的有关),更新会报超时错误。
原因是检索时会对表进行锁定,其他连接读取数据时没问题,但更新由于锁的原因会失败,发现DataReader对表进行了锁定。

解决方法:
1.数据量小的时候,将数据加载到DataTable活填充到实体类列表,然后遍历处理更新。这个方法在数据量太大时会造成性能瓶颈。

2.如果数据量大,每次读取一定的数量,然后采用方法1进行处理。缺点是:当有些符合检索条件的数据不符合处理的条件时,不符合条件的数据会累积,累计数量超过每次读取的数量(这里有个排序问题)时,会block住,无法处理新的数据。

3.在检索时显式指定不对表进行锁定,语句为:

select col1, col2, ...
from table1 with(nolock)
where ...

这种方法会造成潜在的数据不一致。

4.还有一种是按分页的思路,用方法1每次处理一页,进行适当的调整后可以解决这个问题。