Is this a MS EnterLib DAAB BUG or not?
1: class Program
2: {
3: static void Main()
4: {
5:
6: string invalidSql = "SELECT * FROM {InvalidTable}";
7: string validSql = "SELECT * FROM {ValidTable}";
8:
9:
10: Database db = DatabaseFactory.CreateDatabase();
11: using (TransactionScope scope = new TransactionScope())
12: {
13: DbCommand commandWithInvalidSql = db.GetSqlStringCommand(invalidSql);
14: DbCommand commandWithValidSql = db.GetSqlStringCommand(validSql);
15:
16: try
17: {
18: db.ExecuteReader(commandWithInvalidSql);
19: }
20: catch
21: { }
22:
23: db.ExecuteReader(commandWithValidSql);
24: }
25: }
26: }
但是在执行第二个ExecuteReader方法的时候却抛出如下一个InvalidOperationException(如下图),错误消息为:“ExecuteReader requires an open and available Connection. The connection's current state is closed.”
原因出在这里:在ExecuteReader中,相应的ADO.NET代码放在try|catch中,当异常抛出后,相应的DbConnect会被关闭。但是由于在我的代码中,两次ExecuteReader的调用是在一个相同的Ambient Transaction中执行的,DAAB在内部采用相同的DbTransaction执行这两项操作,当执行第一项操作时,由于出现异常导致DbConnect关闭,使用相同DbConnect的第二项操作肯定会失败。
1: public virtual IDataReader ExecuteReader(DbCommand command)
2: {
3: ConnectionWrapper wrapper = GetOpenConnection(false);
4:
5: try
6: {
7: //
8: // JS-L: I moved the PrepareCommand inside the try because it can fail.
9: //
10: PrepareCommand(command, wrapper.Connection);
11:
12: //
13: // If there is a current transaction, we'll be using a shared connection, so we don't
14: // want to close the connection when we're done with the reader.
15: //
16: if (Transaction.Current != null)
17: return DoExecuteReader(command, CommandBehavior.Default);
18: else
19: return DoExecuteReader(command, CommandBehavior.CloseConnection);
20: }
21: catch
22: {
23: wrapper.Connection.Close();
24: throw;
25: }
26: }
27:
我不清楚微软在设计的时候,是因为没有考虑到这种场景呢,还是不得以而为之,或者是出于其他因素的考虑,大家有何见解。
出处:http://artech.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Is this a MS EnterLib DAAB BUG or not?相关推荐
- .Net 1.1下WEB引用Win控件的两个Bug
1.WEB系统引用windows控件的方式来实现页面打印的功能,一直使用比较正常,有一天更新后部分机器不能正常加载控件.后来分析的N久,发现是打印控件上我加了一个Label,使用了Arial Blac ...
- 自定义安装MS Office Project2007会出错
作者:朱金灿 来源:http://blog.csdn.net/clever101 今天使用虚拟光驱文件自定义安装MSOffice Project2007,如下图: 然后总是出现一个错误: 从网上找来一 ...
- ASP.Net中无刷新执行Session身份验证
在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的 ...
- 服务器检测到恶意发送文件,微软认证:文件服务器上与恶意文件夹的战争
单位里存在着一些不良分子,给了服务器某个文件夹完全权限吧,就给你搞特殊!!! 里面放些让我们这些管理者都看不到的东东!!!难道真的是这么是别人说的删不了和看不了麽!错啦,请记住在企业里谁在这方面说了算 ...
- EnterLib PIAB又一个BUG?
在<这是EnterLib PIAB的BUG吗?>一文中我们讨论了PIAB关于抽象基类的BUG,今天又发现了一个新的问题.问题的起因源于<IoC+AOP的简单实现>这篇文章,因为 ...
- 这是EnterLib PIAB的BUG吗?
在默认的情况下,EnterLib的PIAB采用基于TransparentProxy/RealProxy的机制实现对方法调用的拦截,进而实现了对横切关注点(Crosscutting Concern)的动 ...
- 再谈borland与MS对BUG的不同态度~
在讨论Delphi 6 SP1对BUG的修补问题时(http://www.delphibbs.com/delphibbs/dispq.asp?lid=648516),我提及"强烈建议Borl ...
- [MS bug]安装SQL Server 2008 错误:is not a valid login or you do not have permission
环境: Windows 7 sp1 x64. 问题描述: 安装到几乎要完成的时候爆出:is not a valid login or you do not have permission.安装失败. ...
- 一个GDIPlus的Bug -- OutofMemory异常
今天发现 framework2.0中的一个GDIPlus的Bug: 在Form的OnPaint事件里面写如下代码: private void Form1_Paint(object sender, Pa ...
最新文章
- 经典爬虫:用Scrapy爬取百度股票
- MariaDB 修改存储路径后启动失败问题解决
- 网络推广外包中如何让网络推广外包专员充分运用网站的市场价值?
- ABAP CHECKBOX 和LISTBOX使用指南
- MoSCow和Kano
- 渐进式web应用程序_如何在渐进式Web应用程序中添加到主屏幕
- 面向对象编程其实很简单——Python 面向对象(初级篇)
- 扩展Python模块系列(二)----一个简单的例子
- python url拼接_python学习笔记——urllib篇
- httpservletrequest_HttpServletResponse和HttpServletRequest取值的2个坑你知道吗?
- 1 元购买 1000+ 册爆款电子书,错过再等一年!
- APE到底比MP3文件“好听”多少
- 可视化大屏|2022年最值得推荐的10款可视化软件
- Atitit Data Matrix dm码的原理与特点
- 数字化转型中平台思维的十大要素-《数字化转型的道与术》
- C#:DataTable 操作
- Word文档导出(使用固定模板)
- 最高效的学习方法——逆向学习法
- 《JavaScript 的诞生》
- DSP模块之:EDMA
热门文章
- Clojure入门教程: Clojure – Functional Programming for the JVM中文版
- BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)
- Web自动化测试 Selenium+Eclipse+Junit+TestNG+Python
- Python 文件写操作
- 初学SSH 配置+错误总结
- CF628D Magic Numbers (数据大+数位dp)求[a,b]中,偶数位的数字都是d,其余为数字都不是d,且能被m整除的数的个数...
- webpack学习(七)打包压缩图片
- hdu 4496 并查集 逆向 并查集删边
- 昂靠的由来[本博作者爆料]
- Spring+ehcache缓存实例