调用子时不能使用圆括号(Cannot use parentheses when calling a

2019-08-17 09:05发布

我有一个包含以下代码尝试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查询?

谢谢。

Answer 1:

你有没有尝试过删除这些括号?

cmdEmail.CreateParameter "@ContentID", 3, 1, , Request.Form("ContentID")

至于我记得,当你调用一个函数,并且不使用其返回值总是发生。

更新 :看来,真正的问题是断行:


cmdEmail.Parameters.Append _     '' note this "_" character
    cmdEmail.CreateParameter("@ContentID", 3, 1, , Request.Form("ContentID"))


Answer 2:

你是不是缺少有“设置”声明?

即:

<%
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语句来调用子程序来代替。

还有从埃里克利珀一篇博客文章,解决这个常见的错误:

你是什么意思“不能用括号?”



Answer 3:

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


文章来源: Cannot use parentheses when calling a Sub