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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 最新版本的DataRabbit(版本号:V3.2)新增一项重要功能--可以捕获访问数据库时产生的异常的详细信息,包括:异常对象、Sql语句、sql参数的名称和值。这是由IDBOperationLogger接口提供支持的。

     最新版本的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 DBOperationLoggerEmptyDBOperationLogger 将忽略异常信息,而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框架中了?通过TransactionScopeFactoryDBOperationLogger属性。例如:

 

            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) -- 序 文末处下载,谢谢!

 

 

 

 

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
3月前
|
安全 Java 数据库
Jasypt加密数据库配置信息
本文介绍了使用 Jasypt 对配置文件中的公网数据库认证信息进行加密的方法,以提升系统安全性。主要内容包括:1. 背景介绍;2. 前期准备,如依赖导入及版本选择;3. 生成密钥并实现加解密测试;4. 在配置文件中应用加密后的密码,并通过测试接口验证解密结果。确保密码安全的同时,保障系统的正常运行。
278 3
Jasypt加密数据库配置信息
|
4月前
|
人工智能 数据挖掘 API
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
514 21
基于neo4j数据库和dify大模型框架的rag模型搭建——后续补充
|
4月前
|
Java 数据库 Docker
基于neo4j数据库和dify大模型框架的rag模型搭建
基于neo4j数据库和dify大模型框架的rag模型搭建
1060 35
|
2月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
244 0
|
5月前
|
SQL 数据库连接 数据库
在C++的QT框架中实现SQLite数据库的连接与操作
以上就是在C++的QT框架中实现SQLite数据库的连接与操作的基本步骤。这些步骤包括创建数据库连接、执行SQL命令、处理查询结果和关闭数据库连接。在实际使用中,你可能需要根据具体的需求来修改这些代码。
287 14
|
6月前
|
数据库连接 PHP 数据库
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用ODBC使用数据库绑定参数功能异常
|
6月前
|
Oracle 关系型数据库 Java
|
6月前
|
数据库
【YashanDB知识库】数据库审计shutdown immediate操作导致数据库异常退出
【YashanDB知识库】数据库审计shutdown immediate操作导致数据库异常退出
|
6月前
|
数据库
【YashanDB知识库】调整NUMBER精度,再执行统计信息收集高级包偶现数据库异常退出
【问题分类】功能使用 【关键字】NUMBER类型精度修改,统计信息收集 【问题描述】调整表中NUMBER字段精度时,数据库在收集统计信息时会异常退出。原因是YashanDB处理NUMBER字段精度时误踩内存。 【解决方法】锁定涉及NUMBER精度调整的表的统计信息;升级数据库至22.2.13.100及以上版本。 【影响范围】22.2.13.100以前版本。
|
3月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
667 1

热门文章

最新文章