DataRabbit 轻量的ORM框架(18)-- 捕获数据

系统 2029 0

最新版本的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( Exception ee, string methodName, string cmdText, IDataParameterCollection parameters);
}

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

DataRabbit内部提供了 IDBOperationLogger 接口的两种实现: EmptyDBOperationLogger DBOperationLogger EmptyDBOperationLogger 将忽略异常信息,而 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框架中了?通过 TransactionScopeFactory DBOperationLogger 属性。例如:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> DataConfiguration config = ;
TransactionScopeFactory transactionScopeFactory
= 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) -- 序 文末处下载,谢谢!

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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论