Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

@@ROWCOUNT

28 views
Skip to first unread message

Luca Perazzo

unread,
Jul 5, 2004, 6:05:05 AM7/5/04
to
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.

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

Sandro Bizioli

unread,
Jul 5, 2004, 6:20:45 AM7/5/04
to
Il /05 lug 2004/, *Luca Perazzo* ha scritto:

> 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
===========================

Lorenzo Benaglia

unread,
Jul 5, 2004, 6:28:56 AM7/5/04
to
Luca Perazzo wrote:
> STORED PROCEDURE:
> SELECT [campi]
> FROM [tabella]
>
> return @@RowCount

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

Ivano

unread,
Jul 5, 2004, 6:37:43 AM7/5/04
to

>> 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.
>>

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

Luca Perazzo

unread,
Jul 5, 2004, 6:42:22 AM7/5/04
to
Ciao Lorenzo,

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...

Luca Perazzo

unread,
Jul 5, 2004, 6:43:10 AM7/5/04
to
Ciao,
perchè il recordset che ottengo non supporta il recordcount, il risultato
infatti di questo comando è -1

Ciao

Luca Perazzo
"Sandro Bizioli" <san...@lombardiacom.it> wrote in message
news:Xns951D7D96...@207.46.248.16...

Luca Perazzo

unread,
Jul 5, 2004, 6:45:43 AM7/5/04
to
Ciao Ivano,
certo ho tenuto conto di questa caratteristica, come vedi nell'esempio il
return è subito dopo la select.

Grazie mille

Luca Perazzo


"Ivano" <mari...@libero.it> wrote in message
news:2664b01c4627c$1aa71200$a401...@phx.gbl...

Lorenzo Benaglia

unread,
Jul 5, 2004, 7:11:41 AM7/5/04
to
Luca Perazzo wrote:
> 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.

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

Lorenzo Benaglia

unread,
Jul 5, 2004, 9:08:54 AM7/5/04
to
Lorenzo Benaglia wrote:
> hai ragione, se la stored procedure restituisce un result set non
> riesco a leggere il parametro di output.

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.

0 new messages