调用Sub时不能使用括号

时间:2009-10-06 13:41:12

标签: sql asp-classic properties

我有一个经典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
%>

但是,该页面现在报告以下错误;

调用Sub时不能使用括号 /welcome/default2.asp,第436行 cmdEmail.CreateParameter(“@ ContentID”,3,1,request.Form(ContentID)) -------------------------------------------------- --------------------- ^

这是ASP的一些错误还是我需要更改我尝试参数化查询的方式?

谢谢。

3 个答案:

答案 0 :(得分:2)

您是否错过了那里的“Set”声明?

即:

<%
Set cmdEmail = Server.CreateObject("ADODB.Command")
Set rsEmail = Server.CreateObject("ADODB.Recordset")

<强>更新

回应尼尔的评论:

  

谢谢CraigTP。好像是   创建ADODB.Command的实例   和ADODB.Recordset,但有问题   他最后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 Method (ADO)
Parameters Collection (ADO)
Append Method (ADO)

请注意标题为“备注参数集合”的部分:

  

您必须设置a的Type属性   附加之前的参数对象   到参数集合。

.Type对象的Parameter属性从DataTypeEnum枚举中获取值,以指定参数的数据类型。将上面代码的[the datatype of the parameter]位替换为相关的数据类型枚举值。

更新2:

抱歉,没有注意到标题文字的问题已经改变了!

啊..旧经典“在调用Sub时不能使用括号”错误,是吗?

嗯,这里解释一下:

Cannot use parentheses when calling a Sub

简而言之:

  

你没有调用子程序   调用语句,但使用括号   ()。在没有调用子程序时   Call语句,不要使用   括号中。

     

要更正此错误:

     
      
  • 从子程序调用中删除括号。
  •   
  • 使用Call语句来调用子例程。
  •   

还有来自Eric Lippert的博客文章解决了这个常见错误:

What do you mean "cannot use parentheses?"

答案 1 :(得分:2)

您是否尝试过删除这些括号?

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

据我记忆,当你调用一个函数并且不使用它的返回值时,总会发生这种情况。

更新:似乎真正的问题是换行符:


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

答案 2 :(得分:0)

set cmdEmail = Server.CreateObject("ADODB.Command")

如果正在创建ADODB.Command的实例,请尝试并输入一些调试语句。

e.g。

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