10bet网址
MySQL连接器/NET开发指南
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 1.3 mb
PDF (A4)- 1.3 mb


5.9使用连接器/NET拦截器类

拦截器是一种软件设计模式,它提供一种透明的方式来扩展或修改程序的某些方面,类似于用户出口。不需要重新编译。在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 ");