我的网页上有一个下拉列表,其中所选项目必须传递到数据库中的存储过程查询。但是,我在绑定方法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
这里有什么建议吗?
答案 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)
您的命令文本名称应与您的程序名称相同....此处它们都是不同的