2017-08-30 128 views
0

我正在开发与Visual Studio 2017年的报告网络。我所有的SQL查询参数化和正常工作。问题出在某些查询中,像程序中那样具有exec命令。防止SQL执行查询与执行或执行

例如:

而不是SELECT * FROM tabla WHERE [email protected]
我已经把exec('SELECT * FROM tabla WHERE [email protected]')

EXEC情况下无法正常工作。该错误信息是:

必须声明标量变量“” @id“”“& vbCrLf &‘必须声明标量变量‘’@id’”“ 任何人都知道一个可能的解决方案

。?

非常感谢

+0

可以使用'sp_executesql'或将查询转换为函数/存储过程并使用参数调用它们。 –

+0

另一种选择是使用EF并使用LINQ构建查询。这甚至可以让你根据用户的选择构建实际的查询,例如使用不同的Where()条件,OrderBy()这些字段。 –

回答

3

你使用的参数在“参数化”的位置(即你不是想参数表/列名),你可以使用sp_executesql使用的参数,以保持提供:

exec sp_executesql N'select * from tabla where [email protected]',N'@id int',@id = @id 

使用exec创建不访问任何外部变量/参数的一个新的上下文,但sp_executesql让你明确地传递变量到内环境。 (没有要求内部和外部变量名称相同,但通常保持最简单)

+0

好用!谢谢! –