我有一个包含以下代码尝试parametised查询传统的ASP页面;
<%
Set cmdEmail = Server.CreateObject("ADODB.Command")
Set rsEmail = Server.CreateObject("ADODB.Recordset")
cmdEmail.CommandText = "SELECT * FROM VWTenantPropertiesResults WHERE ContentID = ?"
cmdEmail.CommandType = 1
cmdEmail.ActiveConnection = MM_dbconn_STRING
cmdEmail.Parameters.Append
cmdEmail.CreateParameter("@ContentID", 3, 1, , request.Form("ContentID"))
rsEmail.Open cmdEmail
%>
但是,页面现在报告以下错误;
调用子/welcome/default2.asp时不能使用括号,线436 cmdEmail.CreateParameter( “@内容识别”,3,1,,REQUEST.FORM(内容识别))------------- -------------------------------------------------- -------- ^
这是ASP的一些bug或者我需要改变我试图parametised查询?
谢谢。
你有没有尝试过删除这些括号?
cmdEmail.CreateParameter "@ContentID", 3, 1, , Request.Form("ContentID")
至于我记得,当你调用一个函数,并且不使用其返回值总是发生。
更新 :看来,真正的问题是断行:
cmdEmail.Parameters.Append _ '' note this "_" character
cmdEmail.CreateParameter("@ContentID", 3, 1, , Request.Form("ContentID"))
你是不是缺少有“设置”声明?
即:
<%
Set cmdEmail = Server.CreateObject("ADODB.Command")
Set rsEmail = Server.CreateObject("ADODB.Recordset")
更新:
为了响应的尼尔的评论:
谢谢CraigTP。 这似乎是创建ADODB.Command和ADODB.Recordset的实例,但有问题witht他最后4行代码。
我想代码的最后几行,应改为类似:
cmdEmail.CommandText = "SELECT * FROM VWTenantPropertiesResults WHERE ContentID = ?"
cmdEmail.CommandType = 1
cmdEmail.ActiveConnection = MM_dbconn_STRING
Set adoParam = cmdEmail.CreateParameter("@ContentID", 3, 1, , request.Form("ContentID"))
adoParam.Type = [the datatype of the parameter]
cmdEmail.Parameters.Append(adoParam)
需要注意的是.CreateParameter
方法将返回一个Parameter
对象。 你应该这样返回的对象赋值给一个变量,你那么作为参数传递给使用.Append
的方法Command
对象的Parameters
集合。
请参见以下链接了解更多信息:
CreateParameter方法(ADO)
参数集(ADO)
追加方法(ADO)
注意标题为“备注参数集”部分,在那里它规定:
你必须将其追加到Parameters集合之前设置的参数对象的类型属性。
的.Type
所述的属性Parameter
对象从取值DataTypeEnum枚举来指定的参数的数据类型。 取代[the datatype of the parameter]
上述与有关的数据类型枚举值的我的码位。
更新2:
对不起,没注意这个问题标题文本改变了!
啊..经典的老错误,嗯“无法调用Sub当使用括号”?
那么,这是在这里解释:
调用子时不能使用圆括号
简而言之:
你没有CALL语句调用一个子程序,但使用括号()。 当调用没有Call语句子程序,不要用括号括。
要纠正这个错误:
- 从子程序调用删除括号。
- 使用Call语句来调用子程序来代替。
还有从埃里克利珀一篇博客文章,解决这个常见的错误:
你是什么意思“不能用括号?”
set cmdEmail = Server.CreateObject("ADODB.Command")
尝试把一些调试语句来检查,如果创建的实例ADODB.Command
。
如
If (cmdEmail is Nothing) Then
Response.Write("could not create the instance")
Else
Response.Write("created the instance")
End If
此外,除去With
块,看看是否有什么差别
dim paramContentID
cmdEmail.CommandText = "SELECT * FROM VWTenantPropertiesResults WHERE ContentID = ?"
cmdEmail.CommandType = 1
cmdEmail.ActiveConnection = MM_dbconn_STRING
set paramContentID = cmdEmail.CreateParameter("@ContentID", 3, 1, , request.Form("ContentID"))
cmdEmail.Parameters.Append paramContentID