0

我有以下代码(查询缩写):

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它没有,知道为什么吗?

4

1 回答 1

4

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

甚至更好的单线

myCommand.Parameters.Add("@0", OdbcType.Int).Value = Convert.ToInt32(Request.QueryString["days"]);
于 2013-06-26T11:10:39.633 回答