Vbscript 使用ASP向存储过程传递参数
我试图在我的经典ASP.NET中向SQL存储过程传递一些参数。我已经看过几篇关于这方面的文章,不确定我做错了什么,因为我似乎没有看到我的差异Vbscript 使用ASP向存储过程传递参数,vbscript,asp-classic,adodb,Vbscript,Asp Classic,Adodb,我试图在我的经典ASP.NET中向SQL存储过程传递一些参数。我已经看过几篇关于这方面的文章,不确定我做错了什么,因为我似乎没有看到我的差异 set conn = CreateObject("ADODB.Connection") conn.open ("DSN=SERVER;UID=username;PWD=pwd;Database=MyDatabase") set cmd = Server.CreateObject("ADODB.Command") set cmd.ActiveConn
set conn = CreateObject("ADODB.Connection")
conn.open ("DSN=SERVER;UID=username;PWD=pwd;Database=MyDatabase")
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandType = adCmdStoredProc
cmd.CommandText = my_proc
cmd.Parameters.Refresh
cmd.Parameters(1) = "MyParam"
set rs = cmd.execute
我发现了错误
Arguments are of the wrong type, are out of acceptable range, or are in conflict
with one another.
通过
后期绑定
使用ADO,这意味着像adCmdStoredProc
、adParamInput
等常量对代码来说是未知的(因此它们总是0)
您可以查找它们并在代码中定义所需的常量(或者直接使用数字,但如果以后再次编辑代码,则可读性不好)
或者看看-您可能会在c:\Program Files\Common Files\System\ado\adovbc.inc
您通过后期绑定使用ado,这意味着像adCmdStoredProc
,adParamInput
等常量对您的代码来说是未知的(因此它们总是0)
您可以查找它们并在代码中定义所需的常量(或者直接使用数字,但如果以后再次编辑代码,则可读性不好)
或者看看-您可能会在
c:\Program Files\Common Files\System\ado\adovbc.inc
我认为只有一小部分你做错了:
set conn = CreateObject("ADODB.Connection")
conn.open ("DSN=SERVER;UID=username;PWD=pwd;Database=MyDatabase")
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandType = 4 ' adCmdStoredProc constant is not defined in your context
cmd.CommandText = my_proc
cmd.Parameters.Refresh
cmd.Parameters(1).value = "MyParam"
set rs = cmd.execute
ADO常量可能未定义,而且(但不确定)参数应该通过其值属性进行赋值。我认为只有一小部分错误:
set conn = CreateObject("ADODB.Connection")
conn.open ("DSN=SERVER;UID=username;PWD=pwd;Database=MyDatabase")
set cmd = Server.CreateObject("ADODB.Command")
set cmd.ActiveConnection = conn
cmd.CommandType = 4 ' adCmdStoredProc constant is not defined in your context
cmd.CommandText = my_proc
cmd.Parameters.Refresh
cmd.Parameters(1).value = "MyParam"
set rs = cmd.execute
ADO常量可能未定义,而且(但不确定)参数应通过其值属性进行赋值。但是,让我建议一种比使用adovbs
常量文件更有效、更易于管理的方法
元数据允许您定义对DLL常量的引用,即使您像在经典ASP环境中那样使用后期绑定。可能值得一提的是,您可以在单个页面中添加元数据引用,但又为什么呢
要使用它,只需将元数据标记添加到global.asa
文件中(应位于Web应用程序的根目录中)
根据系统的不同,ADO类型库可能不同,相应地调整文件
属性
我在所有应用程序中都使用这种方法,主要用于引用ADO和CDO类型库中的常量
ADO类型库
CDO类型库
这些都是我个人参考的例子,文件位置可能不同,而UUID
属性应该完全相同
重要提示:
在global.asa
中使用METADATA
方法时,请记住删除对adovbs
常量include文件(adovbs.inc
或adovbs.asp
通常)的任何引用,否则您将获得
Name redefined error
名称重定义错误
此外,元数据
仅在IIS 4.0及更高版本中可用
有用的链接
- (推荐阅读)
但让我建议一种比使用adovbs
常量文件更有效、更易于管理的方法
元数据允许您定义对DLL常量的引用,即使您像在经典ASP环境中那样使用后期绑定。可能值得一提的是,您可以在单个页面中添加元数据引用,但又为什么呢
要使用它,只需将元数据标记添加到global.asa
文件中(应位于Web应用程序的根目录中)
根据系统的不同,ADO类型库可能不同,相应地调整文件
属性
我在所有应用程序中都使用这种方法,主要用于引用ADO和CDO类型库中的常量
ADO类型库
CDO类型库
这些都是我个人参考的例子,文件位置可能不同,而UUID
属性应该完全相同
重要提示:
在global.asa
中使用METADATA
方法时,请记住删除对adovbs
常量include文件(adovbs.inc
或adovbs.asp
通常)的任何引用,否则您将获得
Name redefined error
名称重定义错误
此外,元数据
仅在IIS 4.0及更高版本中可用
有用的链接
- (推荐阅读)
谢谢,这正是我所需要的。@doby48不,不要这样做,使用adovbc.inc
是一个糟糕的替代品。添加元类型库引用是一个一次性的引用(因为它被添加到经典ASP应用程序中的global.asa
),而adovbc.inc
必须包含在每个页面中,或者设置在另一个#include
文件中才能全局应用它。谢谢,这正是我需要的。@doby48不,不要这样做,使用adovbc.inc
不能很好地替代。添加的元类型库引用是一个一次性引用(因为它被添加到经典ASP应用程序中的global.asa
),而adovbc.inc
必须包含在每个页面中,或设置在另一个#include
文件中才能全局应用它。这不能作为参数(1)
尚未在集合中定义(使用.CreateParameter()
来定义它),而且.Parameters
集合从0
开始是有序的。Refresh
从服务器获取参数,并将其添加到集合中。Parameters
集合恐怕错过了这一点。过去我对Refresh
的结果好坏参半,我更喜欢自己声明。还有麦汁