如何使用C#Ado.Net在sql查询中查找参数

lov*_*mar 2 c# sql sql-server ado.net

我有这个查询,用户在运行时输入.

SELECT * FROM Reports 
WHERE ReportDate > DATEADD(d, @Days, getdate())
AND ReportCode = cast(@Reportcode as int)
Run Code Online (Sandbox Code Playgroud)

在C#.Net或SQL中是否有任何方法可以从此sql查询中检索参数名称@Days@ReportCode

使用@字符的正则表达式或字符串匹配不是完全证明,因为参数名称可能以空格结尾,也可能不以空格结尾.它们可以紧跟逗号或括号等,名称本身可以包含特殊字符.

如果我在不提供参数值的情况下执行此查询,则sql引擎抛出异常必须声明标量变量"@Days".我可以捕获异常并获取第一个参数名称,但是在查询中获取下一个参数会非常复杂.

Mar*_*ell 5

exec sp_describe_undeclared_parameters N'SELECT * FROM Reports 
WHERE ReportDate > DATEADD(d, @Days, getdate())
AND ReportCode = cast(@Reportcode as int)'
Run Code Online (Sandbox Code Playgroud)

输出:

parameter_ordinal name          suggested_system_type_id suggested_system_type_name  
----------------- ------------- ------------------------ ----------------------------
1                 @Days         56                       int                         
2                 @Reportcode   56                       int                         
Run Code Online (Sandbox Code Playgroud)

(跳过更多列)

但是,这是SQL Server功能,而不是ADO.NET功能.

如果我在不提供参数值的情况下执行此查询,

这里的关键技巧非常简单:提供正确的参数

注意:您也可以用@params它来告诉您已经了解的那些.有关更多详细信息,请参阅文档.