ASP Classic - TSQL函数调用失败

时间:2016-02-29 20:57:44

标签: sql-server tsql asp-classic

我正在研究一个调用TSQL proc的快速ASP Classic表单。我创建的第一个很有效,因为它没有发送任何值。现在我正在处理我的第二个,它看起来有点像这样:

eval

也试过:

exec update_allocation(@Anum='164360',@mTeam='5',@Team='9',@Perc='14',@Bill=140000,@Mons=164360) 

第一个给我一个错误:

  

用于SQL Server的Microsoft OLE DB提供程序错误' 80040e14'不正确   语法附近' @Anum'。

第二个给了我:

  

用于SQL Server的Microsoft OLE DB提供程序错误' 80040e14'不正确   语法附近' 164360'。

我不确定如何处理这些错误。问题必须是参数,但不确定应该如何发送。

1 个答案:

答案 0 :(得分:2)

comments are correct但是这里有一些解释为什么会这样。

两个错误;

  

用于SQL Server的Microsoft OLE DB提供程序错误' 80040e14' ' @ Anum'。

附近的语法不正确

  

用于SQL Server的Microsoft OLE DB提供程序错误' 80040e14' ' 164360'附近的语法不正确。

实际上非常具有描述性,可以找出问题所在。通常在这种情况下,错误突出显示错误描述中的单词或短语之前的问题,在这些情况下@Anum参数和164360值。如果我们在两种情况下都遵循前一个字符是一个开括号(

与T-SQL中的函数不同,存储过程不需要在其参数周围使用括号,这样做会引发错误(如上所述)以纠正此错误从两个语句中删除括号。 / p>

使用命名参数;

EXEC update_allocation @Anum='164360', @mTeam='5', @Team='9', @Perc='14', @Bill=140000, @Mons=164360

没有命名参数;

EXEC update_allocation '164360', '5' ,'9' ,'14' ,140000 ,164360

这两种方法都是可接受的语法,但我个人认为使用命名参数方法更有用,因为它允许您选择要传递的参数,甚至排除具有默认值的参数。您仍然可以使用无名方法执行此操作,但值的顺序位置更为重要。

关于SQL注入漏洞的

@sean-lange makes a valid point here,考虑使用ADODB.Command对象执行存储过程,而不是只调用Execute()对象上的ADODB.Connection方法

以下是使用Classic ASP和ADODB.Command对象调用存储过程的示例。