最近我写了个程序,利用command对象调用存储过程,
在传参数时遇到问题,首次append 参数没问题,调用存储过程,执行成功,
但是想给这个command对象参数集合重新添加参数,然后调用其他存储过程
却没有办法清除原来的参数,我是这样清除的:
if cmd.parameters.count<>0 then
cmd.parameters.refresh
end if
看了MSDN后只知道这么写,却没有任何作用,结果当然是调用存储过程是出错
请赐教!!!!谢谢
在传参数时遇到问题,首次append 参数没问题,调用存储过程,执行成功,
但是想给这个command对象参数集合重新添加参数,然后调用其他存储过程
却没有办法清除原来的参数,我是这样清除的:
if cmd.parameters.count<>0 then
cmd.parameters.refresh
end if
看了MSDN后只知道这么写,却没有任何作用,结果当然是调用存储过程是出错
请赐教!!!!谢谢
Dim iRe As ADODB.Recordset
Dim count1&, count2&, count3&, count4&
Set iCmd = New ADODB.Command
With iCmd
.ActiveConnection = iConc 'iConc是数据库连接字符串
.CommandType = 4 '类型为存储过程adCmdStoredProc
.CommandText = "p_qry" '调用的存储过程名
.Parameters.Refresh
.Parameters("@userid ") = 12
'得到输出参数的结果
.Execute
count1 = .Parameters("@count1")
count2 = .Parameters("@count2")
count3 = .Parameters("@count3")
count4 = .Parameters("@count4")
'得到记录集的输出结果
Set iRe = .Execute
End With
parameter对象又append新的parameter对象,当然再一次运行时会说指定的参数太多,
你试着把command对象定义成一个局部的试一下
该范例使用 Append 和 CreateParameter 方法执行具有输入参数的存储过程。Public Sub AppendX() Dim cnn1 As ADODB.Connection
Dim cmdByRoyalty As ADODB.Command
Dim prmByRoyalty As ADODB.Parameter
Dim rstByRoyalty As ADODB.Recordset
Dim rstAuthors As ADODB.Recordset
Dim intRoyalty As Integer
Dim strAuthorID As String
Dim strCnn As String ' 打开连接。
Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
cnn1.Open strCnn
cnn1.CursorLocation = adUseClient
' 使用一个参数打开命令对象。
Set cmdByRoyalty = New ADODB.Command
cmdByRoyalty.CommandText = "byroyalty"
cmdByRoyalty.CommandType = adCmdStoredProc
' 获取参数值并追加参数。
intRoyalty = Trim(InputBox("Enter royalty:"))
Set prmByRoyalty = cmdByRoyalty.CreateParameter("percentage", _
adInteger, adParamInput)
cmdByRoyalty.Parameters.Append prmByRoyalty
prmByRoyalty.Value = intRoyalty ' 通过执行命令创建记录集。
Set cmdByRoyalty.ActiveConnection = cnn1
Set rstByRoyalty = cmdByRoyalty.Execute
' 打开 Authors 表以获取作者姓名进行显示。
Set rstAuthors = New ADODB.Recordset
rstAuthors.Open "authors", cnn1, , , adCmdTable
' 打印记录集中的当前数据,从 Authors 表中添加作者姓名。
Debug.Print "Authors with " & intRoyalty & " percent royalty"
Do While Not rstByRoyalty.EOF
strAuthorID = rstByRoyalty!au_id
Debug.Print " " & rstByRoyalty!au_id & ", ";
rstAuthors.Filter = "au_id = '" & strAuthorID & "'"
Debug.Print rstAuthors!au_fname & " " & rstAuthors!au_lname
rstByRoyalty.MoveNext
Loop rstByRoyalty.Close
rstAuthors.Close
cnn1.CloseEnd Sub
refresh方法就是起这个作用,
dim i as integer
for i=cmd.parameters.count-1 to 0 step -1
cmd.parameters.delete(i)
next