gpt4 book ai didi

c# - 在C#中用参数动态替换SQL字符串

转载 作者:行者123 更新时间:2023-11-30 20:10:29 24 4
gpt4 key购买 nike

有没有人试过将一个标准的sql字符串动态地变成一个参数化的查询?换句话说,我需要改变这个:

SELECT * FROM customers WHERE name = 'Adams'

为此:

SELECT * FROM customers WHERE name = @name

我已经开始使用 Microsoft.Data.Schema.ScriptDom.Sql 和 Microsoft.Data.Schema.ScriptDom 程序集,但在我着手处理它之前,我想知道是否已经有一些东西在野外那会做到这一点。

最佳答案

SQL Server 在幕后执行此操作(以及类似 ClearTrace 的工具)。

一种方法是使用正则表达式进行规范化(不完全是您要找的),例如基于 Itzik Ben-Gan 完成并由 Adam Machanic 修改的 SQL CLR 方法:

[Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
public static SqlString sqlsig(SqlString querystring)
{
return (SqlString)Regex.Replace(
querystring.Value,
@"([\s,(=<>!](?![^\]]+[\]]))(?:(?:(?:(?:(?# expression coming
)(?:([N])?(')(?:[^']'')*('))(?# character
)(?:0x[\da-fA-F]*)(?# binary
)(?:[-+]?(?:(?:[\d]*\.[\d]*[\d]+)(?# precise number
)(?:[eE]?[\d]*)))(?# imprecise number
)(?:[~]?[-+]?(?:[\d]+))(?# integer
)(?:[nN][uU][lL][lL])(?# null
))(?:[\s]?[\+\-\*\/\%\&\\^][\s]?)?)+(?# operators
)))",
@"$1$2$3#$4");
}

但输出的准确性可能无法捕获所有可能的参数化短语。

我很好奇你为什么需要这个?

更新:正如 Martin 提到的,还有 RML Utilities for SQL Server

Description of the Replay Markup Language (RML) Utilities for SQL Server

关于c# - 在C#中用参数动态替换SQL字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4975242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com