OVH Cloud OVH Cloud

Valeur de retour d'un procédure stockée en VB.NET

4 réponses
Avatar
aitoz
Bonjour a tous,

Voici un bout de mon code, base de donnée SQL server. Dans ma procédure
stockée je renvoi une valeur qui correspond au plus grand nombre trouvé dans
une colonne.
Je voudrais récupérer ce nombre et l'utiliser par la suite.


With cmdNumLigne
.Connection = SqlConnection1
.CommandType = CommandType.StoredProcedure
.CommandText = "ps_sgsa_numligne"
NBLGN = cmdNumLigne.ExecuteNonQuery()
End With

Quand je fais un test dans SQL server ca fonctionne bien, mais arrivé avec
mon code, je recois tjs la valeur -1.
je pense que je ne récupère pas la valeur de retour de ma procédure mais la
valeur comme quoi la procédure s'est exécuté !!!

Comment récupérer la bonne valeur ???

Voici ma procédure :

CREATE PROCEDURE ps_sgsa_numligne
(
@NUBL_BL BIGINT
)
AS
BEGIN
DECLARE @NBLGN INT

SELECT MAX(LI_LIGN) AS Expr1
FROM dbo.LIVRAISONS
WHERE (LI_NUBL = @NUBL_BL)

RETURN @NBLGN

END
go

4 réponses

Avatar
Fabien Bezagu
Aitoz,

ExecuteNonQuery renvoie le nombre de lignes affectées. Ici aucune.
ExecuteScalar renvoie le résultat de la procédure. Je pense que ce sera
mieux.

Fabien

"aitoz" a écrit dans le message de news:

Bonjour a tous,

Voici un bout de mon code, base de donnée SQL server. Dans ma procédure
stockée je renvoi une valeur qui correspond au plus grand nombre trouvé
dans une colonne.
Je voudrais récupérer ce nombre et l'utiliser par la suite.


With cmdNumLigne
.Connection = SqlConnection1
.CommandType = CommandType.StoredProcedure
.CommandText = "ps_sgsa_numligne"
NBLGN = cmdNumLigne.ExecuteNonQuery()
End With

Quand je fais un test dans SQL server ca fonctionne bien, mais arrivé avec
mon code, je recois tjs la valeur -1.
je pense que je ne récupère pas la valeur de retour de ma procédure mais
la valeur comme quoi la procédure s'est exécuté !!!

Comment récupérer la bonne valeur ???

Voici ma procédure :

CREATE PROCEDURE ps_sgsa_numligne
(
@NUBL_BL BIGINT
)
AS
BEGIN
DECLARE @NBLGN INT

SELECT MAX(LI_LIGN) AS Expr1
FROM dbo.LIVRAISONS
WHERE (LI_NUBL = @NUBL_BL)

RETURN @NBLGN

END
go




Avatar
aitoz
Trop fort ! Ca c'est cool !!! ca marche !

Franchement je ne savais pas la différence entre les différents mode ! je
pensais qu'il s'agissait d'autres choses.
Bon, je prend mon bouquin et je fais comme booboo je me relis le chapitre.

Merci ca marche impec
Avatar
Francois Muller
"aitoz" a écrit dans le message de news:

Voici un bout de mon code, base de donnée SQL server. Dans ma procédure
stockée je renvoi une valeur qui correspond au plus grand nombre trouvé
dans une colonne.
Je voudrais récupérer ce nombre et l'utiliser par la suite.


With cmdNumLigne
.Connection = SqlConnection1
.CommandType = CommandType.StoredProcedure
.CommandText = "ps_sgsa_numligne"
NBLGN = cmdNumLigne.ExecuteNonQuery()
End With



Le ExecuteNonQuery est destiné (comme son nom l'indique) à exécuter des
ordres ne retournant intrinsèquement pas d'info (INSERT, DELETE, typiquement
ou éventuellement des ordres d'administration - CREATE TABLE, ALTER, etc
...).
ExecuteQuery ne renvoie que le nombre de ligne affectées par l'opération
dans la DataBase. (Par exemple si tu fais un ExecuteNonQuery de "DELETE
TableTartempion", il te renverra le nombre de ligne supprimées).

Utilise ExecuteScalar pour un retour de valeur unique.

F.
Avatar
Francois Muller
"Francois Muller" a écrit
dans le message de news: O7dQD%
ExecuteQuery ne renvoie que le nombre de ligne affectées par l'opération



Lire "ExecuteNonQuery", ci dessus ;-))

F.