我有以下代码(查询缩写):
string q_sel = @"SELECT c.editedBy, c.*
FROM wf.chan c
WHERE date(editedTime) >= current_date - ? AND editedBy = '?') c2
ORDER BY editedTime";
if (myConnection.State != ConnectionState.Open)
OpenDb();
myCommand = new OdbcCommand(q_sel, myConnection);
myCommand.Parameters.AddWithValue("@0", Request.QueryString["days"]);
myCommand.Parameters.AddWithValue("@1", Request.QueryString["user"]);
OdbcDataReader myReader = myCommand.ExecuteReader();
如果我手动将?
替换为const值,则查询有效,但Parameters.AddWithValue
却没有,不知道为什么?
答案 0 :(得分:3)
AddWithValue假设(有时会出错)参数的数据类型作为第二个参数传递的值。你的行
myCommand.Parameters.AddWithValue("@0", Request.QueryString["days"]);
为第一个参数传递一个字符串,而不是像你期望的那样传递一个数字。 我将尝试在
中更改该行 myCommand.Parameters.AddWithValue("@0", Convert.ToInt32(Request.QueryString["days"]));
还要考虑使用代码创建的特定参数,您可以在其中设置DataType和Size
OdbcParameter p = new OdbcParameter("@0", OdbcType.Int)
p.Value = Convert.ToInt32(Request.QueryString["days"]))
myCommand.Parameters.Add(p);