我正在研究一个调用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'。
我不确定如何处理这些错误。问题必须是参数,但不确定应该如何发送。
答案 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
对象调用存储过程的示例。