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.   先到这里,后续继续研究。

  • 相关阅读:
    LeetCode 295. Find Median from Data Stream (堆)
    LeetCode 292. Nim Game(博弈论)
    《JavaScript 模式》读书笔记(4)— 函数2
    《JavaScript 模式》读书笔记(4)— 函数1
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数3
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数2
    《JavaScript 模式》读书笔记(3)— 字面量和构造函数1
    《JavaScript 模式》读书笔记(2)— 基本技巧3
    《JavaScript 模式》读书笔记(2)— 基本技巧2
    《JavaScript 模式》读书笔记(2)— 基本技巧1
  • 原文地址:https://www.cnblogs.com/abeam/p/7203463.html
Copyright © 2011-2022 走看看