Procedure stockée

cs_sonia1 Messages postés 3 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 17 juin 2006 - 17 juin 2006 à 17:48
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 - 10 août 2006 à 20:30
Je fais un programme qui permet de gérer les collections de fèves. L'interface est sous Visual Studio 2005 en vbnet et les données sous SQL SERVER 2005.


J'ai donc une table VRITRINE (numero et nom), une table FEVE(numero et nom), une table COLLECTION (numero et nom), et une table TYPE_COLLECTION (numero et libelle). Une feve appartient a une seule collection, une collection a un seul type de collection et une feve est exposée dans une seule vitrine.


Mon programme se compose de 3 combo box (liste des noms de vitrine, liste des noms de collections, et liste des types). Je veux faire afficher le nom des feves selon le critère demander (nom sélectionné ds une liste). On ne peut emettre qu'un critère.


J'ai fait cette procedure stockée sous sql serveur :


 



CREATE






PROCEDURE
[dbo]

.
[Recherche]@nom_vitrine


varchar
(
20

),

@nom_collec




varchar
(
50

),

@nom_type




varchar
(
20

)

AS









declare
@nom

varchar
(
20

);






declare
@collec

varchar
(
50

);






declare
@type

varchar
(
20

);






declare
@name

varchar
(
20

);






set
@nom

=
@nom_vitrine

;






set
@collec

=
@nom_collec

;






set
@type

=
@nom_type

;






if
@nom_vitrine

<>



''



or
@nom_vitrine

<>



null






BEGIN






SELECT
nom_feve

=
@name


FROM
FEVE

,
VITRINE


WHERE
FEVE

.
num_vitrine

=
VITRINE

.
num_vitrine


AND
nom_vitrine

=
@nom


END






else






if
@nom_collec

<>
''



or
@nom_collec

<>



null






BEGIN






SELECT
nom_feve

=
@name


FROM
FEVE

,



COLLECTION






WHERE
FEVE

.
num_collec

=



COLLECTION
.
num_collec


AND
nom_collec

=
@collec


END






else






BEGIN






SELECT
nom_feve

=
@name


FROM
FEVE

,
TYPE_COLLECTION

,



COLLECTION






WHERE



COLLECTION
.
num_type

=
TYPE_COLLECTION

.
num_type


AND



COLLECTION
.
num_collec

=
FEVE

.
num_collec


AND
libelle_type

=
@type


END






return
@name

J'ai tester ce que me retourne celle ci , elle me retourne le bon nombre de ligne (apercu des données a partir du queriesdataAdapter), mais je n'ai aucune données. (Je précise que j'ai 315 fèves d'engistrer, 13 types , 109 collection et 18 vitrines). Je me demande donc d'où vient l'erreur (est ce qu'on peut retourner un ensemble de données ?).

De plus, je n'arrive pas à les faire afficher dans le datagrid.

Merci d'avance

1 réponse

cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
10 août 2006 à 20:30
Est ce que tout simplement cette partie :
SELECT

nom_feve
= @name

Ne serait pas écrite à l'envers ?
Plutôt à mettre comme celà :
 

SELECT

@name
= nom_feve
S'il y a plusieurs valeurs à renvoyer avec cette syntaxe, il va renvoyer la dernière de la liste. Pour renvoyer une liste depuis une procédure stockée il faudrait plutôt faire celà :

SELECT

nom_feve

FROM FEVE
, TYPE_COLLECTION
,
COLLECTION
WHERE
COLLECTION.num_type
= TYPE_COLLECTION
.num_type

AND
COLLECTION.num_collec
= FEVE
.num_collec

AND libelle_type
= @type
De plus RETURN ne permet de renvoyer qu'un entier (et pas le contenu d'une variable contenant du texte comme ici) depuis une procédure stockée, il est plutôt utilisé pour renvoyer un numéro d'erreur.

Christian Robert - Winwise
http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
0
Rejoignez-nous