◎请教高手◎ 在VB中获取Return参数和多记录集的奇怪问题。
/***********************************************************/
--假设存储过程如下:
Create proc Test3
@EName varchar(50),
@CName varchar(10),
@Count1 int output,
@Count2 int output
as
select @Count1 =100 '返回参数1
Select @Count2 = 200 '返回参数2
select Employee_Name from Employee '返回记录集1
Select Company_Name from Company '返回记录集2
return 1000 '返回值
***********************************************************/
Dim rs1 As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset
Dim cmd As New ADODB.Command
Dim Prm1 As ADODB.Parameter
Dim Prm2 As ADODB.Parameter
Dim Prm3 As ADODB.Parameter
Dim Prm4 As ADODB.Parameter
Dim Prm5 As ADODB.Parameter
cmd.CommandText = "Test3"
cmd.CommandType = adCmdStoredProc
cmd.ActiveConnection = connMain
Set Prm1 = cmd.CreateParameter(, adVarChar, adParamInput, 50, "李")
Set Prm2 = cmd.CreateParameter(, adVarChar, adParamInput, 10, "科技")
Set Prm3 = cmd.CreateParameter(, adInteger, adParamOutput)
Set Prm4 = cmd.CreateParameter(, adInteger, adParamOutput)
Set Prm5 = cmd.CreateParameter(, adInteger, adParamReturnValue)
With cmd.Parameters
.Append Prm5
.Append Prm1
.Append Prm2
.Append Prm3
.Append Prm4
End With
Set rs1 = cmd.Execute
debug.print cmd.Parameters(0).Value & " " & cmd.Parameters(3).Value & " " & cmd.Parameters(4).Value
set rs2 = rs1.NextRecordset
.....
问题:
1、如果将“Set rs1 = cmd.Execute”改为“cmd.Execute”,可以正确获取三个参数,但这样就获取不到记录集了。请问既能返回三个参数,又能获取记录集。(50分)
2、如果在存储过程中将两个Select语句去掉之后,则不管用“Set rs1 = cmd.Execute”还是“cmd.Execute”,都可以正确获取三个参数。难道Select语句对返回参数有什么影响吗。请问是什么原因,在写存储过程或者写VB代码是应注意些什么?(40)
3、Prm5是存储过程的Return参数,如果把 append Prm5语句放在 append prm4之后,则提示“为过程和函数Test3指定了过多的参数”。难道Return参数必须放在最前面Append吗?请问是什么原因?(10)