Javascript ADO 记录集打开方法不起作用。参数化查询

Posted

技术标签:

【中文标题】Javascript ADO 记录集打开方法不起作用。参数化查询【英文标题】:Javascript ADO recordset open method not working. Parametrized queries 【发布时间】:2015-06-17 17:25:27 【问题描述】:

我正在创建一个网页,并有一些 javascript 代码将一些信息从网页插入到 MS 访问数据库。 我正在使用 ADO 连接和记录集,但我的 open 方法有问题。

这是我遇到问题的代码的 sn-p

var name =document.StatusReports.empname.value;
var query = "Select * From reportForm Where EmployeeName =" + name;

    alert(query);

    if(adoRS.Open(query, adoConn, 1, 3));

Name 只是一个保存文本框值的变量。 (这有效) 如果我使用 alert(query) 一切都会很好地显示:Select * From reportForm Where EmployeeName = kevin 好像串联工作正常。 但是,如果我尝试打开与该查询的连接,则会收到此错误:

SCRIPT3600: No value given for one or more required parameters. 

好像它没有识别串联。

注意:它可以在没有串联的情况下工作。例如,如果我硬编码一个值:

 var query = "Select * From reportForm Where EmployeeName = kevin";

但这当然不是目的。

更新:我认为问题在于查询没有参数化。我记得在 Java 中这发生在我身上,但我将查询参数化了,我就完成了。 不知道如何使用 javascript 参数化查询

【问题讨论】:

搜索字符串应该用引号引起来。试试:var query = "Select * From reportForm Where EmployeeName ='" + name + "'". 成功了!如果您想将其作为答案,那么我可以对其进行检查。谢谢! 【参考方案1】:

以下查询将在 Access 中产生错误,因为它试图比较两个字段名称:“EmployeeName”和“kevin”:

Select * From reportForm Where EmployeeName = kevin

以下查询应该产生错误,因为它将“EmployeeName”与“kevin”的字符串value进行比较:

Select * From reportForm Where EmployeeName = 'kevin'

将搜索字符串 name 放在引号中,如下所示:

var query = "Select * From reportForm Where EmployeeName ='" + name + "'";

【讨论】:

以上是关于Javascript ADO 记录集打开方法不起作用。参数化查询的主要内容,如果未能解决你的问题,请参考以下文章

ADO 简介

ADO 简介

ADO Recordset 对象

ADO Recordset 对象

ADO 记录集数据未显示在表单上

将 DAO 记录集转换为断开连接的 ADO 记录集 dbDecimal 问题