适配器无法填充数据集中的数据:引发异常
本文关键字:数据 异常 数据集 填充 适配器 集中 | 更新日期: 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 + ''''
您的命令文本名称应该与过程名称相同。。。。这里它们都是不同的