La stored è semplicissima ma il risultato che ottengo da @@rowcount è vuoto
se restituisco il valore tramite RETURN, e se invece provo ad assegnarlo ad
una variabile OUTPUT ottengo il valore Null.
Utilizzo ADO + Visual Basic per eseguire la stored.
Grazie per l'aiuto
Luca Perazzo
STORED PROCEDURE:
SELECT [campi]
FROM [tabella]
return @@RowCount
CODICE VB
Dim adocom As ADODB.Command
Set adocom = New ADODB.Command
With adocom
.ActiveConnection = SharedCon
.CommandType = adCmdStoredProc
.CommandText = "StoredProcedure"
Set Result = .Execute
NumRow = .Parameters("@RETURN_VALUE").Value
End With
Set adocom = Nothing
> Buongiorno a tutti,
> ho un problema con @@ROWCOUNT, ho la necessità di restituire come
> risultato di una stored procedure, oltre al recordset anche il
> numero di righe estratte.
>
> La stored è semplicissima ma il risultato che ottengo da
> @@rowcount è vuoto se restituisco il valore tramite RETURN, e se
> invece provo ad assegnarlo ad una variabile OUTPUT ottengo il
> valore Null. Utilizzo ADO + Visual Basic per eseguire la stored.
>
Relativamente al codice VB perchè non usi un Result.recordcount?
--
===========================
Sandro Bizioli
===========================
OK
> CODICE VB
>
> Dim adocom As ADODB.Command
>
> Set adocom = New ADODB.Command
>
> With adocom
> .ActiveConnection = SharedCon
>
> .CommandType = adCmdStoredProc
> .CommandText = "StoredProcedure"
>
>
> Set Result = .Execute
>
> NumRow = .Parameters("@RETURN_VALUE").Value
> End With
>
> Set adocom = Nothing
KO :-)
Prima di eseguire il Command devi definire un parametro di tipo
adParamReturnValue che poi andrai a leggere al termine della Execute.
A titolo di esempio leggi il seguente post:
http://tinyurl.com/29qz6
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://mvp.support.microsoft.com
http://italy.mvps.org
Hai tenuto presente che nelle SP devi catturare il
risultato di @@ROWCOUNT appena aseguita l'istruzione,
altrimenti la variabile si azzera nuovamente.
declare @Ris int
select * from Tabella where.....
set @Ris = @@ROWCOUNT --funziona
select * from Tabella where.....
if @@ERROR > 0
RETURN
set @Ris = @@ROWCOUNT --NON funziona
...Almeno questa è la mia esperienza
Ciao
Ti ringrazio molto, ma purtroppo, la situazione non cambia, ho gli stessi
problemi,
anche dichiarando esplicitamente il parametro di return il risultato è
sempre vuoto.
Non so proprio come risolvere il problema.
Grazie
Luca Perazzo
"Lorenzo Benaglia" <lbenagl...@tin.it> wrote in message
news:2ksor9F...@uni-berlin.de...
Ciao
Luca Perazzo
"Sandro Bizioli" <san...@lombardiacom.it> wrote in message
news:Xns951D7D96...@207.46.248.16...
Grazie mille
Luca Perazzo
"Ivano" <mari...@libero.it> wrote in message
news:2664b01c4627c$1aa71200$a401...@phx.gbl...
Ciao Luca,
hai ragione, se la stored procedure restituisce un result set non riesco a
leggere il parametro di output.
Come workaround puoi impostare un cursore static come nel seguente esempio:
http://tinyurl.com/2qnws
In alternativa puoi passare da un oggetto ADODB.Connection modificando il
tipo di cursore di default associato alla connessione impostandolo lato
client.
Esempio:
Dim intRowCount
intRowCount = GetStudentsByCountry("Italy")
MsgBox "RowCount = " & intRowCount, vbInformation
Private Function GetStudentsByCountry(ByVal Country)
Dim cmd
Dim intRowCount
Dim rs
Dim cn
Const CN_STRING = "Provider=SQLOLEDB;Initial Catalog=tempdb;Data
Source=localhost;Integrated Security=SSPI"
Const adInteger = 3
Const adVarChar = 200
Const adCmdStoredProc = 4
Const adParamInput = 1
Const adParamReturnValue = 4
Const adUseClient = 3
' Definisco un oggetto ADODB.Connection
Set cn = CreateObject("ADODB.Connection")
With cn
.ConnectionString = CN_STRING
.CursorLocation = adUseClient
.Open
End With
' Definisco un oggetto ADODB.Command
Set cmd = CreateObject("ADODB.Command")
With cmd
.CommandType = adCmdStoredProc
.CommandText = "dbo.up_GetStudentsByCountry"
.Parameters.Append .CreateParameter("@ReturnValue", adInteger,
adParamReturnValue)
.Parameters.Append .CreateParameter("@Country", adVarChar,
adParamInput, 10, Country)
Set .ActiveConnection = cn
' Eseguo la stored procedure
Set rs = .Execute
' Leggo il valore del valore di ritorno dalla collection Parameters
intRowCount = .Parameters("@ReturnValue").Value
End With
' Valorizzo il valore di ritorno della funzione
GetStudentsByCountry = intRowCount
' Pulizia
Set cmd = Nothing
cn.Close
Set cn = Nothing
End Function
In questo caso otterrai un oggetto ADODB.Recordset client side e sarai in
grado di leggere il valore di ritorno della stored procedure.