适配器无法填充数据集中的数据:抛出异常

时间:2012-02-29 07:53:51

标签: c# asp.net sql sql-server-2008

我的网页上有一个下拉列表,其中所选项目必须传递到数据库中的存储过程查询。但是,我在绑定方法adp.Fill(ds)处收到一个奇怪的错误。

异常总是说“关键字'附近的语法不正确'到'。”,其中to始终是下拉选项中的第二个单词。 例如:下拉列表中的项目 - 9 to 5(第二个字:to),age of empires(第二个字:of)
例外:
Incorrect syntax near the keyword 'to'
Incorrect syntax near the keyword 'of'等。

这是我正在使用的方法:

private void Bind(string ss)
{
    SqlDataAdapter adp = new SqlDataAdapter("Retrieve", ConfigurationManager.ConnectionStrings["cn"].ConnectionString);
    DataSet ds = new DataSet();
    adp.SelectCommand.CommandType = CommandType.StoredProcedure;
    adp.SelectCommand.Parameters.Add("@s1", SqlDbType.NVarChar, 255).Value = ss;
    adp.SelectCommand.Parameters.Add("@s2", SqlDbType.NVarChar, 255).Value = DropDownList1.SelectedItem.ToString();
    adp.Fill(ds);
    DataList1.DataSource = ds;
    DataList1.DataBind();
}

StoredProcedure的

ALTER PROCEDURE [dbo].[Retrieve_SegmentedQ]
(
    @s1 nvarchar(255),
    @s2 nvarchar(255)
)

AS
BEGIN
    DECLARE @query nvarchar(max)

    SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (' + @s1 + ') AND UnsegmentedQuery=' + @s2

    exec sp_executesql @query
END

这里有什么建议吗?

3 个答案:

答案 0 :(得分:2)

更新以下程序

ALTER PROCEDURE [dbo].[Retrieve_SegmentedQ]
(
@s1 nvarchar(255),
@s2 nvarchar(255)
)

AS
BEGIN
DECLARE @query nvarchar(max)

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (''' + @s1 + ''') AND UnsegmentedQuery=''' + @s2  + ''''

exec sp_executesql @query

END

答案 1 :(得分:2)

错误在这里:

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (' + @s1 + ') AND UnsegmentedQuery=' + @s2

你有存储过程,但使用它作为查询,所以做类似sql注入的东西。因此,您将有以下查询:

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (5 to 9) AND UnsegmentedQuery=age of empires

这是错误的。 通过以下方式为您的参数添加单引号。

SET @query = 'SELECT DISTINCT Details from tbData WHERE Name IN (''' + @s1 + ''') AND UnsegmentedQuery=''' + @s2 + ''''

答案 2 :(得分:0)

您的命令文本名称应与您的程序名称相同....此处它们都是不同的