这是一个简单的搜索页面(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 ?
答案 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);