2

This is a simple search page (search.aspx?title=Hello) and I want to query the db for like matches. According to the microsoft docs (http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx see: Remarks) this is the correct way to do it, but the parameter (?) never gets set to the value of the query string.

        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);

The parameter never changes to what the query string was, it just executes the query

        SELECT * FROM Table WHERE Title LIKE ?
4

2 に答える 2

1

次のことを試していただけますか。

"SELECT * FROM Table WHERE Title LIKE @p1"

これは、ADO.Net コマンド テキストでパラメーターを使用する場合の規則だと思います。

于 2013-10-17T21:00:06.080 に答える
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);
于 2013-10-17T23:37:01.500 に答える