我有以下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对象的所有设置和属性都是正确的,但无论出于什么原因,它都会抛出异常。
非常感谢任何帮助。
答案 0 :(得分:2)
使用ODBC和ADO,一般来说,问号?
用作参数的占位符。参数按照它们附加到Parameters
集合的顺序绑定到命令中的占位符。在您的示例中,将strSQL
替换为:
var strSQL = "SELECT id FROM tbl_info WHERE title LIKE ? ORDER BY id";
您仍然可以为您创建的参数命名,但其唯一目的是能够稍后按名称引用它(例如,使用cmd.Parameters.Item(":search")
)。