in语句不使用值传递参数

时间:2016-02-04 08:38:50

标签: c# sql

我有一个商店编程,在复选框组中选中所选部门。当我传递一个值时,它可以工作,但是当我通过超过2个部门时,它不起作用

在商店前卫

CREATE PROCEDURE [dbo].[REPORT]
    @dept nvarchar(max)=null
AS
set @dept=left(@dept,len(@dept)-1)
select * from department where deptid in(@dept)

在我的代码背后

string dept = "";
foreach (ListItem item in CheckBoxList1.Items)
{
    if(item.Selected)
    {
        dept+="'"+item.Value.ToString()+"',";
    }
}
...
...
...
cmd.Parameters.AddWithValue("@dept", dept);
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
    sda.Fill(dt);
    gvdata.datasource=dt;
    gvdata.bind();
}

1 个答案:

答案 0 :(得分:0)

一种方法是将查询转换为“动态”sql(执行sql字符串);这应该有效:

SET @dept=left(@dept,len(@dept)-1)
exec('select * from department where deptid in(' + @dept + ')');

在执行动态SQL时要注意注入攻击。