DataRabbit 轻量的ORM框架(18)-- 捕获数据库访问异常的详细信息

最新版本的DataRabbit(版本号:V3.2)新增一项重要功能--可以捕获访问数据库时产生的异常的详细信息,包括:异常对象、Sql语句、sql参数的名称和值。这是由IDBOperationLogger接口提供支持的。

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> /// <summary>
/// IDBOperationLogger用于捕获住DB操作异常。可以用于记录DB操作失败时的语句和参数。
/// </summary>
public interface IDBOperationLogger
{
void LogException(Exceptionee, string methodName, string cmdText,IDataParameterCollectionparameters);
}

当通过DataRabbit访问数据库时,所产生的任何异常,都会被IDBOperationLogger接口捕获住,你可以实现自己的Filter来对捕获的异常进行处理,比如,记录下执行失败的SQL语句和对应的参数值。

DataRabbit内部提供了IDBOperationLogger接口的两种实现:EmptyDBOperationLogger DBOperationLoggerEmptyDBOperationLogger 将忽略异常信息,而DBOperationLogger将会把异常的详细信息记录到日志文件。

比如,在数据库的Student表中插入一条记录时,产生主键冲突的异常,则DBOperationLogger会记录类似下面的的日志:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 2008 / 11 / 19 11 : 49 : 20 :高--违反了PRIMARYKEY约束 ' PK_Student ' 。不能在对象 ' dbo.Student ' 中插入重复键。语句已终止。错误类型:System.Data.SqlClient.SqlException。位置:
< dbCommand >
< method > ExcuteCommand </ method >
< text > INSERTINTOStudent([AutoID],[Name],[Age],[Comment])VALUES(@AutoID,@Name,@Age,@Comment) </ text >
< parameters >
< paraname = " @AutoID " value = " 0 " />
< paraname = " @Name " value = " Sky " />
< paraname = " @Age " value = " 30 " />
< paraname = " @Comment " value = " NoComment " />
</ parameters >
</ dbCommand >

日志中,<dbCommand>节点下的<text>子节点的内容就是执行失败的SQL语句,而<parameters>节点下的子节点则列出了所有的参数名称及其对应的值。

那么,如何注入IDBOperationLogger实例到DataRabbit框架中了?通过TransactionScopeFactoryDBOperationLogger属性。例如:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> DataConfigurationconfig = ;
TransactionScopeFactorytransactionScopeFactory
= new TransactionScopeFactory();
transactionScopeFactory.DataConfiguration
= config;
transactionScopeFactory.DBOperationLogger
= new DBOperationLogger( " DBException.txt " );
transactionScopeFactory.Initialize();

上述配置会将异常日志记录到当前目录下的DBException.txt 文件中。

如果不设置DBOperationLogger属性,则DataRabbit框架默认采用EmptyDBOperationLogger

记录执行失败的SQL语句和对应的参数值,对于我们分析异常产生的原因是十分有用的,而DataRabbit可以自动为你记录了这些信息。

关于V3.2版本的DataRabbit 请到DataRabbit 轻量的ORM框架(00) -- 序 文末处下载,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 轻量、弱侵入性。比如,DataRabbit对你的数据库设计没有任何要求(而有的数据访问框架可能要求数据表必须有唯一主键)。 2. 约定优于配置。使用DataRabbit不需要任何配置,这使得DataRabbit更加易用。 3. 数据库类型无关性。统一的数据访问接口屏蔽了数据库类型的差异,目前版本的DataRabbit内置了对SqlServer和Oracle的支持,可以通过插件的方式来支持其它类型的数据库。 4. DataRabbit中的所有数据访问功能都是由各种访问器(如IOrmAccesser、IRelationAccesser、ITableAccesser、IDataSchemaAccesser、IEntityRelationLoader、ISPAccesser)来提供的。 5. 所有的访问器接口的引用都可以从DataRabbit的根(“Root”,或称入口点)获得,这个根就是TransactionScopeFactory。 6. 一个根(“Root”)实例就对应着一个数据库。也可以这么说,针对一个特定的数据库,我们的应用只需要维护一个Root即可。 7. DataRabbit提供的所有的访问器(如IOrmAccesser)都可以在两种环境中工作:事务环境和非事务环境。这是由所有的访问器都继承了的ITransactionAccesser这个接口体现出来的。 8. 任何一个访问器实例,如果在非事务环境中工作,那么它就是无状态的,DataRabbit将以Singleton的模式提供它的实例;如果访问器实例工作于事务环境中,那么它就是有状态的,并且它的生命期将随事务的结束而结束,DataRabbit以“Single Call”的模式提供它的实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值