RobLaw84
RobLaw84

Reputation: 175

Execute stored procedure and return resultset

I'm a complete VBScript newbie and I am trying to execute a stored procedure and read the resultset. I have tried numerous different approaches using articles online but nothing works and I'm stumped. The database is SQL Server 2008 R2, the application is an off-the-shelf ERP system but I'm able to add my own code to it.

I can execute code by using:

connection.execute"insert into blah blah blah"

And I can read result set by using:

Set objRS = CreateObject("ADODB.Recordset")

objRS.Open "select a, b, c FROM blahblah", Connection, adOpenStatic, adLockBatchOptimistic,    adCmdText
If objRS.EOF = False Then
    a = objRS.Fields("a").Value
    b = objRS.Fields("b").Value
    c = objRS.Fields("c").Value
End If
objRS.Close

The stored procedure in question is in effect a select statement e.g.:

create procedure [dbname].[dbo].[sptestproc] 
as 
    @Option1 Varchar(10) = NULL,
    @Option2 Varchar(10) = NULL
AS
BEGIN
    select first, second 
    from table1 
    where a = @option1 and b = @toption2
End

My code so far:

Dim sql

sql = "EXEC [dbname].[dbo].[sptestproc] '" & Opt1 & "','" & Opt2 & "'"
Set RS = CreateObject("ADODB.Recordset")
RS.Open sql, Connection, adOpenStatic, adLockBatchOptimistic, adCmdText
Do While Not RS.EOF
    Call App.MessageBox("first",vbInformation,"Data updated")
    Call App.MessageBox("second",vbInformation,"Data updated")
    RS.MoveNext
Loop

But I cannot for the life of me get a procedure to execute and read the results.

Can anyone help?

Thanks

Upvotes: 4

Views: 42603

Answers (3)

Teru
Teru

Reputation: 1

Dim sql

Set RS = CreateObject("ADODB.Recordset")
Set cmd = CreateObject("ADODB.Command")

Set prm = cmd.CreateParameter("@option1", adVarChar, adParamInput, , Opt1)
cmd.Parameters.Append prm
Set prm = cmd.CreateParameter("@option2", adVarChar, adParamInput, , Opt2)
cmd.Parameters.Append prm

cmd.CommandText = "[dbname].[dbo].[sptestproc]"
Set Com.ActiveConnection = Connection
'Connection must be opend already
RS.Open cmd, , adOpenStatic, adLockBatchOptimistic

Do While Not RS.EOF
    Call App.MessageBox("first",vbInformation,"Data updated")
    Call App.MessageBox("second",vbInformation,"Data updated")
    RS.MoveNext
Loop

Upvotes: 0

Teru
Teru

Reputation: 1

Connection.Execute "SET NOCOUNT ON"

Before

SET cmd.ActiveConnection = Connection

I went well.

Upvotes: 0

meda
meda

Reputation: 45490

adCmdText would be for SQL query if you want to execute a stored procedure then you have to use adCmdStoredProc (value 4 instead)

EDIT:

'Set the connection
'...............

'Set the command
DIM cmd
SET cmd = Server.CreateObject("ADODB.Command")
SET cmd.ActiveConnection = Connection

'Set the record set
DIM RS
SET RS = Server.CreateObject("ADODB.recordset")

'Prepare the stored procedure
cmd.CommandText = "[dbo].[sptestproc]"
cmd.CommandType = 4  'adCmdStoredProc

cmd.Parameters("@Option1 ") = Opt1 
cmd.Parameters("@Option2 ") = Opt2 

'Execute the stored procedure
SET RS = cmd.Execute
SET cmd = Nothing

'You can now access the record set
if (not RS.EOF) THEN
    first = RS("first")
    second = RS("second")
end if

'dispose your objects
RS.Close
SET RS = Nothing

Connection.Close
SET Connection = Nothing

Upvotes: 7

Related Questions