使用 c# 托管代码提取 sql 字符串

Posted

技术标签:

【中文标题】使用 c# 托管代码提取 sql 字符串【英文标题】:sql string extraction using c# managed code 【发布时间】:2017-09-05 17:08:02 【问题描述】:

我在 SQL Server DB 项目中有 2 个函数。

GetCatalogueNo 在函数中编写了正则表达式模式。

[SqlFunction]
public static SqlString GetCatalogueNo(string originalString)

   Regex r1 = new Regex("\\d7|\\d3/\\d4");               

    return r1.Match(originalString).Groups[0].Value;

ExtractText 中,我将正则表达式模式作为参数传递。

[SqlFunction]
public static SqlString ExtractText(string originalString, string pattern)

    Regex r1 = new Regex(pattern);

    return r1.Match(originalString).Groups[0].Value;

SQL Server 上的编译代码适用于:GetCatalogueNo

SELECT  dbo.GetCatalogueNo('xxxxx xxxxxxxxxx 9999999 xxxxxxx xxxxxxx .....') 

返回:9999999

在 SQL Server 上编译的代码不返回任何内容:ExtractText

SELECT dbo.[ExtractText] ('xxxxx xxxxxxxxxx 9999999 xxxxxxx xxxxxxx .....', '\\d7|\\d3/\\d4')

我想知道dbo.[ExtractText] 中的第二个参数是如何传递的以及缺少什么。

【问题讨论】:

【参考方案1】:

取得了相同的结果。是转义字符 \ 导致了问题。

SELECT dbo.[ExtractText] ('xxxxx xxxxxxxxxx 9999999 xxxxxxx xxxxxxx .....', '\d7|\d3/\d4') 返回与 GetCatalogueNo 相同的结果。

【讨论】:

以上是关于使用 c# 托管代码提取 sql 字符串的主要内容,如果未能解决你的问题,请参考以下文章

非托管 C++ 代码向托管代码发送字符串的错误

如何在托管代码(C#)中从本机代码(C++)获取字符串数组

从 c# dll 调用/编组字符串到非托管代码

C# 调用非托管 C++ 返回平方符号字符串

让非托管 c++ 代码调用调用 c# 代码的托管 c++ 代码

将非托管 EXE 作为资源合并到托管 C# 代码中