Vbscript 使用ASP向存储过程传递参数

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

我试图在我的经典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.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
的结果好坏参半,我更喜欢自己声明。还有麦汁