OleDbCommand中的参数未更改

时间:2013-10-17 20:33:40

标签: c# asp.net oledb

这是一个简单的搜索页面(search.aspx?title = Hello),我想查询数据库中的匹配项。根据microsoft docs(http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx参见:备注),这是正确的方法,但参数(?)永远不会被设置为查询字符串的值。

        string sqlcmd = "SELECT * FROM TableName WHERE Title LIKE ?";

        OleDbCommand command = new OleDbCommand(sqlcmd, sqlcon);

        OleDbParameter p1 = new OleDbParameter("@p1", OleDbType.WChar);
        p1.Value =  Request.QueryString["title"];         

        OleDbDataAdapter da = new OleDbDataAdapter(command);
        da.SelectCommand.Parameters.Add(p1);

        DataTable dt = new DataTable();
        da.Fill(dt);

参数永远不会改变为查询字符串,它只是执行查询

        SELECT * FROM Table WHERE Title LIKE ?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

"SELECT * FROM Table WHERE Title LIKE @p1"

我认为这是在ADO.Net命令文本中使用参数时的惯例。

答案 1 :(得分:0)

这是我的解决方案,您需要在问号周围使用单引号才能使SQL正常工作。完整的解决方案:

sqlcon.Open();

        string sqlcmd = "SELECT * FROM TableName WHERE Title LIKE '%?%'";

        OleDbCommand command = new OleDbCommand(sqlcmd, sqlcon);     

        command.Parameters.Add(new OleDbParameter("p1", Request.QueryString["Title"]));

        OleDbDataAdapter da = new OleDbDataAdapter(command);

        DataTable dt = new DataTable();
        da.Fill(dt);