【发布时间】:2012-07-10 21:15:46
【问题描述】:
我想编写一些 .NET 代码(最好是 C#)来确定任意 SQL 语句中预期参数的数量。比如这个语句
EXEC etlp.LogPackageEnd ?,?,?
需要 3 个参数。
作为一个 SQL 新手,我花时间阅读其他关于如何解决这个问题的帖子。我已经按照here 的建议尝试使用 TSql100Parser.GetTokenStream,但它为每个问号返回了解析错误。我也尝试过使用 Microsoft.SqlServer.Management.SqlParser.Parser.Parser.Parse() 但在附近出现语法错误?
我意识到我可以使用正则表达式,但我正在寻找通用解决方案;我的理解是参数格式可以改变,所以问号不是指标。
【问题讨论】:
-
您是否要查找存储过程的参数数量?
-
不仅仅是存储过程。我相信问号可以用作 OLE-DB SQL 语句中参数的占位符。此外,问号可能出现在 SELECT * FROM Table1 WHERE Column1 = ?我想处理这些类型的语句,以及在执行存储过程时。
-
当命令类型为 StoredProcedure 时,OleDbCommandBuilder 提供了 DeriveParameters 方法,但 MSDN 文档明确指出您不能对参数化查询使用该方法:(