【发布时间】:2012-12-24 19:21:58
【问题描述】:
可能重复:
Help with a sql search query using a comma delimitted parameter
我想编写一个对表执行选择的存储过程,并且需要一个varchar(max) 类型的输入变量。
我想发送一堆由,分隔的值作为输入参数,例如
'Jack','Jane','Joe'
然后获取包含这些名称之一的行。
在 SQL 中代码是
Select * from Personnel where Name in ('Jack','Joe','Jane');
现在我想在我的 C# 应用程序中有一个变量,比如 strNames 并像这样填充它
string strNames = "'Jack','Joe','Jane'";
并将这个变量发送到 SP 并执行它。像
Select * from Personnel where Name in (''Jack','Joe','Jane'') -- this is wrong
但是我怎样才能告诉 SQL Server 运行这样的命令呢?
我需要做到这一点,我知道这是可能的,请给我线索。
【问题讨论】:
-
是否可以将此字符串
Select * from Table1发送到存储过程,然后 sp 将其作为命令执行?我以某种方式希望 sql 执行一个字符串。 -
是的,有可能,但我永远不会那样做。
-
糟糕,因为它很容易受到攻击?还是其他原因?我很好奇
-
漏洞是一回事。您还会失去 .NET 框架提供的所有便利,例如参数总是以正确的格式传递给查询的事实等(想想日期或浮点值的 i18 问题)。另外,如果您想将语句发送到存储过程,您也可以立即在您的应用程序中执行它 - 有什么区别?
-
马赫迪。您可以使用 sp_executesql 命令执行此操作:msdn.microsoft.com/en-us/library/ms188001.aspx 它确实有它的位置。但是你需要非常小心地使用它。我主要关心的是确保你没有使用用户输入“构建”你的 sql 命令,因此是 sql-injection。
标签: c# .net sql tsql sql-server-2008-r2