zoukankan      html  css  js  c++  java
  • SQL Server 调用 C# 方法实现正则表达式验证

    Ø  前言

    1.   SQL Server 中默认是不支持正则表达式验证的,如果需要某个字符串匹配一个正则表达式的验证规则,就需要额外的编写 C# 方法,并发布到 SQL Server 数据库中。

    2.   很幸运,在 VS 2005 之后的版本中,都支持创建 SQL Server 数据库项目,在该项目中可以创建支持调用 C# 函数的存储过程、函数、触发器等等。

    3.   本文主要学习以下几点:

    1)   VS 2013 中创建 SQL Server 数据库项目。

    2)   创建 C# 函数(完成正则表达式验证)。

    3)   发布 C# 函数到 SQL Server 数据库中。

    4)   SQL Server 调用正则表达式验证函数(标量值函数)。

     

    1.   VS 2013 中创建 SQL Server 数据库项目

    1)   右键解决方案,选择添加 -> 新建项目 -> 其他语言 -> SQL Server -> SQL Server 数据库项目,如图:

    clip_image002[12]

     

    2.   创建 C# 函数(完成正则表达式验证)

    1)   右键 SQL Server 数据库项目,选择添加 -> 新建项 -> SQL CLR C# -> SQL CLR C# 用户定义的函数,如图:

    clip_image004[12]

    2)   默认会创建一个名为 UserDefinedFunctions 的部分类,和一个标记为 Microsoft.SqlServer.Server.SqlFunction 特性的静态方法。类名可以更改,也可以是非部分类,但是必须是静态方法。

    public partial class UserDefinedFunctions

    {

        [Microsoft.SqlServer.Server.SqlFunction]

        public static SqlString MySqlFunction()

        {

            // 在此处放置代码

            return new SqlString (string.Empty);

        }

    }

    3)   修改该方法完成正则表达式验证(也可以添加其他方法)

    /// <summary>

    /// 根据指定的字符串与正则表达式模式,验证是否匹配验证规则。

    /// </summary>

    /// <param name="input">需要验证的字符串。</param>

    /// <param name="pattern">正则表达式。</param>

    /// <param name="ignoreCase">是否忽略大小写。</param>

    /// <returns></returns>

    [Microsoft.SqlServer.Server.SqlFunction]

    public static bool RegexMatch(string input, string pattern, bool ignoreCase)

    {

        bool result = false;

        try

        {

            if (!string.IsNullOrEmpty(input) && !string.IsNullOrEmpty(pattern))

            {

                RegexOptions options = ignoreCase ? (RegexOptions.Multiline | RegexOptions.Compiled)

                    : (RegexOptions.Multiline | RegexOptions.Compiled | RegexOptions.IgnoreCase);

                Match match = Regex.Match(input, pattern, options);

                result = match.Success;

            }

        }

        catch { }

        return result;

    }

     

    3.   发布 C# 函数到 SQL Server 数据库中

    1)   右键 SQL Server 数据库项目,设置目标平台(根据自己 MSSQL 版本选择设置),如图:

    clip_image006[12]

    2)   右键 SQL Server 数据库项目,选择发布。

    3)   编辑“目标数据库连接”,并保存配置文件(下一次发布直接双击打开该文件即可),然后点击“发布”按钮,如图:

    clip_image008[12]

    4)   发布时可能出现:“SQL72014: .Net SqlClient Data Provider: 消息 6257,级别 16,状态 1,第 1 行 为程序集“SQLServerDBProject”执行 CREATE ASSEMBLY 时失败,因为该程序集是为公共语言用户时的不受支持的版本生成的。”错误,如图:

    clip_image010[12]

    5)   该错误是因为公共语言运行库,不支持 .NET Framework 3.5 以上版本,将该项目的目标框架设置为 .NET Framework 3.5 即可,如图:

    clip_image011[12]

     

    4.   SQL Server 调用正则表达式验证函数

    1)   发布成功后,C# 函数就会生成对应的数据库标量值函数,如图:

    clip_image012[12]

    2)   调用函数(完成正则表达式验证)

    SELECT

    dbo.RegexMatch('Amoi0618@126.com', '^[a-z0-9]+@d+.com$', 0) AS 不区分大小写,

    dbo.RegexMatch('Amoi0618@126.com', '^[a-z0-9]+@d+.com$', 1) AS 区分大小写;

    clip_image013[12]

     

    Ø  总结

    1.   本文主要研究的是 C# 创建数据库标量值函数,完成正则表达式验证。

    2.   其实,还有存储过程触发器等等,在有必要时应该也是很有用的。

    1)   存储过程:数据库以存储过程的形式,调用 C# 方法。

    2)   触发器:当数据库触发器触发时,调用 C# 方法。

    3.   先到这里,后续继续研究。

  • 相关阅读:
    delphi 属性 参数 新注释
    delphi query阻塞执行 长时间执行sql的解决办法
    FDLocalSQL
    C# Webservice
    vmware的centos 6虚拟机如何共享文件夹?
    tomcat如何配置启动时自动部署webapps下的war包
    tomcat如何配置context的docBase
    windows本地启动tomcat闪退
    jfinal 字节流存储文件以及解、压缩工具类
    java try catch 异常后还会继续执行吗
  • 原文地址:https://www.cnblogs.com/abeam/p/7203463.html
Copyright © 2011-2022 走看看