ADODB命令失败使用参数化SQL查询执行

时间:2012-10-25 08:47:30

标签: mysql ado jscript

我有以下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块中的每一行之后插入一个alert语句,以查看错误发生的位置 - 在cmd.Parameters.Append之后没问题,但是在运行Execute语句时会抛出异常。

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

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

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

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

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

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