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

推荐订阅源

Y
Y Combinator Blog
GbyAI
GbyAI
爱范儿
爱范儿
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Check Point Blog
M
MIT News - Artificial intelligence
量子位
宝玉的分享
宝玉的分享
MongoDB | Blog
MongoDB | Blog
V
Visual Studio Blog
罗磊的独立博客
F
Fortinet All Blogs
美团技术团队
博客园_首页
博客园 - 【当耐特】
L
LangChain Blog
月光博客
月光博客
腾讯CDC
The Cloudflare Blog
D
Docker
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

博客园 - 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每次处理一页,进行适当的调整后可以解决这个问题。