适配器无法填充数据集中的数据:引发异常

本文关键字:数据 异常 数据集 填充 适配器 集中 | 更新日期: 2023-09-27 18:26:03

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

异常总是显示"关键字"to"附近的语法不正确。",其中to始终是下拉选项中的第二个单词。例如:下拉列表中的项目-9 to 5(第2个单词: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();
}

存储过程

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

有什么建议吗?这里出了什么问题?

适配器无法填充数据集中的数据:引发异常

更新如下所示的过程

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

错误在这里:

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 + ''''

您的命令文本名称应该与过程名称相同。。。。这里它们都是不同的