3

我有以下 JScript 代码:

var conn = new ActiveXObject ("ADODB.Connection");
conn.Open("Driver={MySQL ODBC 5.1 Driver};Server=localhost;Database=blah_blah_blah;User=foo;Password=bar;");
var cmd = new ActiveXObject("ADODB.Command");
cmd.ActiveConnection = conn;

var strSQL = "SELECT id FROM tbl_info WHERE title LIKE :search ORDER BY id";
var search = "test";

try{
    cmd.CommandText = strSQL;
    var param = cmd.CreateParameter(':search', 200, 1, 100, search);
    cmd.Parameters.Append(param);
    var rs = cmd.Execute();
    }
catch (ex) {
    Application.Alert("Error retrieving id information from database.");
}

我已经验证(通过打印它们)Connection 对象设置为 Command 的 ActiveConnection,参数对象具有正确的值,并且 Command 对象具有正确的 SQL 查询作为其 CommandText。我还在 try 块中的每一行之后插入了一条警告语句,以查看错误发生的位置 - 在 cmd.Parameters.Append 之后很好,但是在运行 Execute 语句时会引发异常。

我试过显示实际的异常,但它只是一个通用的“对象错误”消息。

当我直接通过 Connection 对象执行 SQL 查询(不带参数)时,查询执行良好并返回正确的结果集,但是当我对 Command 对象使用参数化查询时似乎失败了。

据我所知,Command 和 Connection 对象的所有设置和属性都是正确的,但无论出于何种原因,它都会引发异常。

对此的任何帮助将不胜感激。

4

1 回答 1

3

对于 ODBC 和 ADO,一般来说,问号?用作参数的占位符。参数按照它们附加到Parameters集合的顺序绑定到命令中的占位符。在您的示例中,替换strSQL为:

var strSQL = "SELECT id FROM tbl_info WHERE title LIKE ? ORDER BY id";

您仍然可以命名您创建的参数,但它的唯一用途是以后能够通过名称引用它(例如,使用cmd.Parameters.Item(":search"))。

于 2012-10-26T06:31:27.933 回答