DataRabbit 轻量的ORM框架(18)-- 捕获数据库访问异常的详细信息
2008-11-19 16:05
477 查看
最新版本的DataRabbit(版本号:V3.2)新增一项重要功能--可以捕获访问数据库时产生的异常的详细信息,包括:异常对象、Sql语句、sql参数的名称和值。这是由IDBOperationLogger接口提供支持的。
/// <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会记录类似下面的的日志:
2008/11/19 11:49:20 : 高 -- 违反了 PRIMARY KEY 约束 'PK_Student'。不能在对象 'dbo.Student' 中插入重复键。语句已终止。错误类型:System.Data.SqlClient.SqlException。位置:
<dbCommand>
<method>ExcuteCommand</method>
<text>INSERT INTO Student ([AutoID],[Name],[Age],[Comment]) VALUES (@AutoID,@Name,@Age,@Comment)</text>
<parameters>
<para name="@AutoID" value="0" />
<para name="@Name" value="Sky" />
<para name="@Age" value="30" />
<para name="@Comment" value="NoComment" />
</parameters>
</dbCommand>
日志中,<dbCommand>节点下的<text>子节点的内容就是执行失败的SQL语句,而<parameters>节点下的子节点则列出了所有的参数名称及其对应的值。
那么,如何注入IDBOperationLogger实例到DataRabbit框架中了?通过TransactionScopeFactory的DBOperationLogger属性。例如:
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) -- 序 文末处下载,谢谢!
/// <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会记录类似下面的的日志:
2008/11/19 11:49:20 : 高 -- 违反了 PRIMARY KEY 约束 'PK_Student'。不能在对象 'dbo.Student' 中插入重复键。语句已终止。错误类型:System.Data.SqlClient.SqlException。位置:
<dbCommand>
<method>ExcuteCommand</method>
<text>INSERT INTO Student ([AutoID],[Name],[Age],[Comment]) VALUES (@AutoID,@Name,@Age,@Comment)</text>
<parameters>
<para name="@AutoID" value="0" />
<para name="@Name" value="Sky" />
<para name="@Age" value="30" />
<para name="@Comment" value="NoComment" />
</parameters>
</dbCommand>
日志中,<dbCommand>节点下的<text>子节点的内容就是执行失败的SQL语句,而<parameters>节点下的子节点则列出了所有的参数名称及其对应的值。
那么,如何注入IDBOperationLogger实例到DataRabbit框架中了?通过TransactionScopeFactory的DBOperationLogger属性。例如:
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)-- 捕获数据库访问异常的详细信息
- 异常详细信息: System.Data.SqlClient.SqlException: 无法打开物理文件 。。。 操作系统错误 32:"32(另一个程序正在使用此文件,进程无法访问。
- EF更新数据库报错:初始化数据库时发生异常。有关详细信息
- DataRabbit 轻量的ORM框架(16)-- Entity缓存
- DataRabbit 轻量的ORM框架(17)-- 使用DataRabbit的最佳实践
- 异常详细信息: System.Data.SqlClient.SqlException:用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法
- DataRabbit 轻量的数据访问框架(10) -- IPagerManager
- DataRabbit 轻量的数据访问框架(14)-- DataRabbit 3.0 与 Linq to sql 性能比较
- 异常详细信息: System.UnauthorizedAccessException: 拒绝访问。
- 异常详细信息: System.Data.SqlClient.SqlException:过程或函数 需要参数 但未提供该参数。
- 20130620-异常详细信息: System.Data.SqlClient.SqlException: 用户 'PC-LIXIANG\ASPNET' 登录失败。
- 由于文件不可访问,或者内存或磁盘空间不足,所以无法打开数据库 'msdb'。有关详细信息,请参阅 SQL Server 错误日志。 (Microsoft SQL Server,错误: 945)
- 安全异常 -------异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权。
- Asp.Net : 捕捉和记录网站中出现的所有未处理错误,抛出详细的页面来源和访问ip,调用的接口方法及异常实例(记事本日志,系统日志及数据库日志)
- 异常详细信息: System.Data.SqlClient.SqlException:用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法
- DataRabbit 轻量的数据访问框架(04) -- IEntityRelationLoader
- DataRabbit 轻量的数据访问框架(13)--DataRabbit 3.0 ORM性能大幅度提升!
- 异常详细信息: System.Data.SqlClient.SqlException:用户 'IIS APPPOOL\DefaultAppPool' 登录失败解决办法v
- 异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权
- DataRabbit 轻量的数据访问框架(13)-DataRabbit 3.0 ORM性能提升