2013-10-17 18 views
2

這是一個簡單的搜索頁面(search.aspx?title = Hello),我想查詢數據庫以查找類似的匹配。根據微軟文檔(http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx請參閱:備註),這是正確的方法,但參數(?)永遠不會設置爲查詢字符串的值。 OleDbCommand中的參數沒有變化

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

參數永遠不會改變的查詢字符串是什麼,它只是執行查詢

​​
+0

但查詢是否有效? – Steve

+0

它按原樣執行,SELECT * FROM表WHERE標題LIKE? – user2892146

+0

使用SELECT * FROM表WHERE標題LIKE'_'並查看它是否適用於單個字符 – Shriroop

回答

1

你能嘗試以下方法:

"SELECT * FROM Table WHERE Title LIKE @p1" 

我認爲這是約定在ADO.Net命令文本中使用參數時。

+0

如果我做了類似SELECT * FROM TableName WHERE Title = @ p1的工作,但它不適用於LIKE。 – user2892146

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