返回存储过程,ado,access,vba

时间:2015-06-11 23:02:53

标签: sql ms-access access-vba ms-access-2010 sql-server-2000

我有以下存储过程。

create procedure dbo.sp_getDailyStats 
    @Rundate varchar(10), @PrevRunDate  varchar(10) OUTPUT
as 
Declare @Claims bigint;
declare @Days bigint;
declare @Claims_Completed_prev bigint;
declare @Claim_inventory bigint;
declare @Inv30 bigint;
declare @Inv30NP bigint
declare @InvNP bigint

set @PrevRundate=convert(varchar(10),dbo.getPreviousBusinessDate(@Rundate),101)

----- not the whole code.  

我从命令行运行它:

declare @myvare varchar(10)
declare @InputDate varchar(10)
set @InputDate='06/10/2015'
exec dbo.sp_getDailystats @InputDate, @myvare output

select @myvare; and it returns the previous date to @myware but I have to put output on that line to make it work.

以下是我的ado代码:

Dim cn As New ADODB.Connection
Dim cmd As New ADODB.Command
Dim rs As New ADODB.Recordset

Dim Newdate As String
Newdate = "06/10/2015"
Dim Prevdate As String

cn.Open "Provider=sqloledb; " & _
"Data Source=" & "BLD-FS-SQLVS01\PRDINST1, 4020" & ";" & _
"Initial Catalog=" & "HNFS_NetProv" & ";" & _
"Integrated Security=SSPI;"

Set cmd.ActiveConnection = cn
cmd.CommandText = "sp_getDailyStats"
cmd.CommandType = adCmdStoredProc

cmd.Parameters(1) = Newdate


rs.CursorType = adOpenStatic
rs.CursorLocation = adUseClient
rs.LockType = adLockOptimistic
Set rs = cmd.Execute

Prevdate = cmd(2)


Set rs = Nothing
Set cn = Nothing

Ado会自动识别出我有两个参数,但它没有返回cmd(2)

那么如何让我的价值出现呢?我看到的所有示例都希望我添加/创建我不需要做的参数。我只需要让参数显示,但我没有办法在程序上输出输出。

1 个答案:

答案 0 :(得分:1)

这里有一些关于输出参数和结果集的混淆。你想要从你的程序中捕获SELECT的@myvare的值;这不是一个“out参数”,而是一个简单的结果集,就像你从常规表中选择它一样。它应该在客户端程序中“rs”变量中的任何其他结果集中捕获。

相反,输出参数是一个定义为具有OUTPUT限定符的过程参数之一,并被定义为SqlCommand对象SqlParameter方向为Output。如果在执行之前没有定义OUCLUT参数,则不会从客户端代码中的过程获取OUTPUT参数的值,然后在过程返回后检查它的值,类似于下面的行(在第一个参数定义之后)在执行之前):

SqlParameter prevRunDate = new SqlParameter("@PrevRunDate", SqlDbType.VarChar);
prevRunDate.Direction = ParameterDirection.Output;
prevRunDate.Size = 10;
cmd.Parameters.Add(prevRunDate);