拦截器是一种软件设计模式,它提供一种透明的方式来扩展或修改程序的某些方面,类似于用户出口。不需要重新编译。在MySQL Connector/NET中,通过更新连接字符串以引用实例化的不同拦截器类集,可以启用和禁用拦截器。
本节中介绍的类和方法不适用于使用.NET Core 1.1框架开发的Connector/NET应用程序。
Connector/NET包含以下拦截器类:
的
BaseCommandInterceptor
允许您在程序发出SQL命令时执行附加操作。例如,您可以检查SQL语句以进行日志记录或调试,用您自己的结果集来实现缓存机制,等等。根据用例的不同,代码可以补充SQL命令,也可以完全替换它。的
BaseCommandInterceptor
类有这些你可以重写的方法:ExecuteScalar(string sql, ref对象returnValue);ExecuteNonQuery(string sql, ref int returnValue);public virtual bool ExecuteReader(string sql, CommandBehavior行为,ref MySqlDataReader returnValue);Init(MySqlConnection连接);
如果你的拦截器覆盖了其中一个
执行……
方法,设置returnValue
输出参数和返回值真正的
是你处理了这件事,还是假
如果你没有处理这个事件。只有当所有命令拦截器返回时,SQL命令才会正常处理假
.的连接传递给
初始化
方法是附加到此拦截器的连接。的
BaseExceptionInterceptor
允许您在程序遇到SQL异常时执行额外的操作。异常拦截机制是根据Connector/J模型建模的。您可以编写拦截器类并将其连接到现有的程序而无需重新编译,并在创建异常时拦截异常。然后可以更改异常类型,并可选地向其附加信息。该功能允许您打开和关闭日志记录和调试代码,而无需在应用程序中硬编码任何内容。这种技术适用于SQL级别引发的异常,而不适用于较低级别的系统或I/O错误。类的子类来开发异常拦截器
BaseExceptionInterceptor
类。您必须重写InterceptException ()
方法。也可以重写Init ()
方法执行一些一次性初始化。每个异常拦截器有两个方法:
拦截异常(异常异常,MySqlConnection连接);Init(MySqlConnection连接);
连接传递到
Init ()
是附加到此拦截器的连接。每个拦截器都需要重写
InterceptException
并返回一个异常。它可以返回给定的异常,也可以将其包装在一个新的异常中。我们目前不提供抑制异常的功能。
下面是在连接字符串上使用FQN(完全限定名)的例子:
MySqlConnection c1 = new MySqlConnection(@"server=localhost;commandinterceptors = CommandApp.MyCommandInterceptor CommandApp”);MySqlConnection c2 = new MySqlConnection(@"server=localhost;exceptioninterceptors = ExceptionStackTraceTest.MyExceptionInterceptor ExceptionStackTraceTest”);
在本例中,调用命令拦截器CommandApp。MyCommandInterceptor
存在于CommandApp
组装。调用异常拦截器ExceptionStackTraceTest。MyExceptionInterceptor
存在于ExceptionStackTraceTest
组装。
要缩短连接字符串,可以在您的app.config
或. config
文件是这样的:
在你这样做之后,你的连接字符串可以看起来像这样:
MySqlConnection c1 = new MySqlConnection(@"server=localhost;commandinterceptors = myC ");MySqlConnection c2 = new MySqlConnection(@"server=localhost;exceptioninterceptors = myE ");