我在我的网页上有一个下拉列表,其中的选定项目必须传递给数据库中的存储过程查询。但是,在我的绑定方法中,我在adp.Fill(ds)
处遇到了一个奇怪的错误。适配器无法填充数据集中的数据:抛出异常
该例外总是说“关键字附近的语法不正确”为“。”,其中to
始终是下拉选项中的第二个单词。 对于如:项目在dropdown- 9 to 5
(第2个字:到),age of empires
(第2个字:)的
例外:
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
有什么建议这里有什么不对?
你能证明你的错误的屏幕截图 – 2012-02-29 08:01:12
您可以在静态访问DataList控件实例方法?你一定要把它变成非静态的,这种方法甚至更多的控制。在ASP.NET中,每个控件都在页面生命周期结束时被回收,并且会在每次新请求时重新创建。通过将它们设置为静态,它们将被每个非常糟糕的请求/用户共享。顺便说一句,你在哪里打开/关闭你的连接? – 2012-02-29 08:05:17
@TimSchmelter:对不起,自从我手写它以来,这是一个错字,并没有从IDE中复制。编辑方法签名。关于连接的打开和关闭:SQLDataAdapter隐含性可以做到这一点。我已经给出了连接字符串作为参数 – Cipher 2012-02-29 08:09:09