Condition sur un procédure avec paramétre output

Signaler
Messages postés
33
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
31 décembre 2009
-
Messages postés
239
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
17 janvier 2013
-
salut les amis
je suis tombé dans un problème et j'espère trouver quelqu'un pour m'aider
la situation :
je construis une application asp.net et je veux travailler avec mon code
dans la partie inscription ,j'ai fait un procédure qui vérifier
si le login et le passeword sont disponible ou pas
si oui l'opération se réalise avec succès sinon message erreur
ma proposition :
CREATE PROCEDURE inscription
(
@login nvarchar(50),
@passeword nvarchar(50),
@etat int OUTPUT
)
AS
if exists(select * from utilisateur where @login=login and @passeword=passeword) then
@etat=1
else
insert into utilisateur values @login,@passeword,@email,@question,@reponse,"utilisateur"
@etat=0
end if
problème:
c'est un problème de syntaxe mais j'arrive pas à le trouver

10 réponses

Messages postés
11
Date d'inscription
lundi 27 décembre 2004
Statut
Membre
Dernière intervention
7 août 2009

Salut,
Plusieurs anomalies sont a notées :
    - select * from utilisateur where [mailto:login= @login login=@login ] and  [mailto:passeword =@passeword passeword= @passeword];
    - L'initialisation des variables doit se faire avec le SET @etat =1
    - Les variables @email,@question,@response ne sont pas déclarés.
Messages postés
433
Date d'inscription
samedi 26 avril 2003
Statut
Membre
Dernière intervention
4 décembre 2009
1
Bonjour , essais ceci :

CREATE PROCEDURE inscription

@login nvarchar(50),
@passeword nvarchar(50),
@etat int OUTPUT

AS BEGIN
if exists(select * from utilisateur where @login=login and @passeword=passeword) then
@etat=1
else
insert into utilisateur values ( @login,@passeword,@email,@question,@reponse,"utilisateur" );
@etat=0
end if
END
Messages postés
33
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
31 décembre 2009

Merci mes amis pour vos réponses



Répondre à  hypen :



Première remarque :j’ai déjà déclarer les paramètres dans mon procédure et j’ai oublier de citer dans l’exemple



Deuxième remarque : je l’ai fait mais rien à changer



Répondre à titeoe :j’ai tester votre proposition mais ça marche pas



Et voila



CREATE PROCEDURE
inscription <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>





(





@login nvarchar(50),





@passeword nvarchar(50),





@email nvarchar(50),





@question nvarchar(50),





@reponse nvarchar(50),





@etat int OUTPUT





)





AS





if exists
(select * from utilisateur where @login=login and     @passeword=passeword)





set
@etat=1





else





insert into
utilisateur values ( @login,@passeword,@email,@question,@reponse,"utilisateur" )





set
@etat=0





end if

return
@etat













ça d’une part ,d’autre part j’ai essayer avec une autre methode sans output





mais je sais pas pourquoi un message d’erreur m’affiche(la fonction ou le procédure (ajout) attend le parametre (@login) qui n’était pas fourni





mon code :






      
If con.State = ConnectionState.Closed Then






                con.Open()






                com1 = New SqlCommand






        
       com2 = New SqlCommand






                com1.Connection = con






                com2.Connection = con






                com1.CommandText = "verifier"






                com1.CommandType = CommandType.StoredProcedure






                com1.Parameters.AddWithValue("@login", TextBox1.Text)






                com1.Parameters.AddWithValue("@passeword", TextBox2.Text)






                i = com1.ExecuteScalar






               
If i <= 0 Then






                   

com2.CommandText = "ajout"






                    com1.CommandType = CommandType.StoredProcedure






                    com2.Parameters.AddWithValue("@login", TextBox1.Text)






                    com2.Parameters.AddWithValue("@passeword", TextBox2.Text)






                    com2.Parameters.AddWithValue("@email", TextBox4.Text)






                    com2.Parameters.AddWithValue("@question", DropDownList1.SelectedValue)






                    com2.Parameters.AddWithValue("@reponse", TextBox5.Text)






                    com2.Parameters.AddWithValue("@role", var)






                    com2.ExecuteNonQuery()






                    com2.Parameters.Clear()






                    com1.Parameters.Clear()






                   

Response.Redirect("liste de produit.aspx")






               
Else







                    Response.Write("ce compte à été utilisé par un autre membre")






 







               
End
If







                con.Close()






           
End
If






Explication :





Le procédure verifier calcul le count





Le procédure ajout fait un simple insertion



Remarque



J’ai testé avec le syntaxe suivant mais ça marche pas



Dim
par1 AsNew SqlClient.SqlParameter






                   
With par1






                 
      .Direction = ParameterDirection.Input






                        .ParameterName = "@login"






                        .Size = 50






                       

.Value = TextBox1.Text






                   
End
With






Aideeeeeeeeeeeeeeeeeeeeeeeeeeeez moi
Messages postés
11
Date d'inscription
lundi 27 décembre 2004
Statut
Membre
Dernière intervention
7 août 2009

Salut,
Le  " return @etat<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

" dans ta procédure est a enlevé. Ca ma déja poser des petits problémes. La procédure renvoi automatiquement @etat comme tu l'as definit en output.

CREATE PROCEDURE inscription
(

@login nvarchar(50),
@passeword nvarchar(50),
@email nvarchar(50),

@question nvarchar(50),

@reponse nvarchar(50),

@etat int OUTPUT )

AS

Begin
   if exists(select * from utilisateur where [mailto:login=@login login=@login]and  [mailto:passeword=@passeword passeword=@passeword])

      set @etat=1
   else 
       begin
            insert into utilisateur values ( @login,@passeword,@email,@question,@reponse,'utilisateur')

           set @etat=0 
      end
  end if
end

 
Messages postés
239
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
17 janvier 2013
5
Bonjour,

je vais ajouter moi aussi ma petite touche sur cette proc' stock'

je ferai:

create procedure proc_inscription (
     @login varchar(50)
    , @password varchar(50)
    , @email varchar(255) -- Prévoir grand car 50 caractères n'est pas suffisant pour certaines adresses email.
    , @question varchar(255) -- Je prendrai un dropdownlist avec des questions prédéfinies.
    , @reponse varchar(255)
)
as
declare @etat int
if exists(select * from utilisateur where login=@login and passeword=@password)
    begin
        set @etat = 1
    end
else
    begin
        insert into utilisateur values(@login, @password, @email, @question, @reponse, 'utilisateur')
        set @etat = 0
    end
select @etat -- Le retour de ta proc' stock'

Voilà, a+

PascalCmoa
[mailto:pascal.aknouche@free.fr email: PascalCmoa]
Messages postés
33
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
31 décembre 2009

Merci mes ami pour vos réponse (hypen+pascal)




Répondre à pascal




Le code ça marche Mais au niveau de vs<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>





  If con.State = ConnectionState.Closed Then






                con.Open()













end if











                com = New SqlCommand













                com.Connection = con


      








          com.CommandText = "proc_inscription"













                    com.CommandType = CommandType.StoredProcedure













                    com.Parameters.AddWithValue("@login", TextBox1.Text)













                    com.Parameters.AddWithValue("@passeword", TextBox2.Text)













                    com.Parameters.AddWithValue("@email", TextBox4.Text)













                    com.Parameters.AddWithValue("@question", DropDownList1.SelectedValue)













                    comat_inscriptiontre reponce







.Parameters.AddWithValue("@reponse", TextBox5.Text)












                   ( faut t-il declarer le parameter @etat si oui comment parce que le parametre output ça marche pas avec moi





Dim


par1 AsNew SqlClient.SqlParameter













                    With par1













                        .Direction = ParameterDirection.output













                        .ParameterName = "@etat"













                        .Size = 50












                    End With




)





                    com.ExecuteNonQuery()





                               If par1 <= 0 Then






Label.text=”l’operation est reussite”







Else






Label.text=” ce compte à été utilisé par un autre membre ”
Messages postés
33
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
31 décembre 2009

With par1 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>




                        .Direction = ParameterDirection.output













                        .ParameterName = "@etat"













                        .Size = 50














dim val as integer=.value                    End With




)





                    com.ExecuteNonQuery()





                               If val<= 0 Then






Label.text="l'operation est reussite"







Else






Label.text=" ce compte à été utilisé par un autre membre "
Messages postés
239
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
17 janvier 2013
5
Bonjour,

Nan il ne faut pas gérer @etat car c'est la valeur qui va être retournée par la requête. Il suffit de récupérer cette valeur via un datatable, un dataset par exemple.

a+

PascalCmoa
[mailto:pascal.aknouche@free.fr email: PascalCmoa]
Messages postés
33
Date d'inscription
jeudi 14 mai 2009
Statut
Membre
Dernière intervention
31 décembre 2009

Salut pascal



Merci beaucoup pour votre réponse



Mon idée



Je voulais travailler avec votre procédure dans un formview



Ma proposition



Voice la partie insert



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 







          

<
asp
:
FormView

ID
="FormView1"
runat
="server"
AllowPaging
="True"











               
BackColor
="Black"
CssClass
="style10"
DataKeyNames
="num_fr"











               

DataSourceID
="SqlDataSource1"

ForeColor
="White">










 









   
<
InsertItemTemplate
>










 

  num_fr:    <asp:TextBoxID="num_frTextBox"runat="server"









'
<%
# Bind("num_fr") %>'/>









 









    nom_f <asp:TextBoxID="nom_frTextBox"runat="server"







"
Text
='
<%
# Bind("nom_fr") %>'/>









 









 prenom_fr  <asp:TextBoxID="prenom_frTextBox"runat="server







"

Text
='
<%# Bind("prenom_fr") %>'/>









                   
<
br
/>










                   











  
<
asp
:
LinkButton
ID
="InsertButton"
runat
="server"
CausesValidation
="True"











 
 
CommandName
="Insert"
ForeColor
="#99FF33"
Text
="Insérer"
/>










 









 
<
asp
:
LinkButton
ID
="InsertCancelButton"
runat
="server"











 
CausesValidation
="False"
CommandName
="Cancel"
                     
Text
="Annuler"
/>










               
</
InsertItemTemplate
>










           
</
asp
:
FormView
>










 
<
asp
:
SqlDataSource
ID
="SqlDataSource1"
runat
="server"











               
ConflictDetection
="CompareAllValues"











               
ConnectionString
="
<%$ ConnectionStrings:ConnectionString %>"








               
InsertCommand
="proc_fournisseur"










           











               
InsertCommandType
="StoredProcedure">










  
<
InsertParameters
>










                   
<
asp
:
Parameter
Name
="num_fr"
Type
="String"
/>










                   
<
asp
:
Parameter
Name
="nom_fr"
Type
="String"
/>










                   
<
asp
:
Parameter
Name
="prenom_fr"
Type
="String"
/>










               

</
InsertParameters
>









           
Et j’ai taper le code suivant










   

Protected

Sub FormView1_ItemInserting(ByVal sender AsObject, ByVal e As System.Web.UI.WebControls.FormViewInsertEventArgs) Handles FormView1.ItemInserting









 









       
If IsPostBack = TrueThen








           
Dim i AsInteger = SqlDataSource1.Insert ‘cette methode verifier si un ligne à été affecté ou pas’








           

If
i = 0 Then








Label.text”inserer un autre , ce code existe deja”







message.Visible = true












           

Else









                message.Visible = False








 









           
End
If










       

End

If










 









 









   
End
Sub









Message erreur






Impossible d'insérer la valeur NULL dans la colonne 'num_fr'








Cette colonne n'accepte pas les valeurs NULL. Échec de INSERT.
L'instruction a été arrêtée.








C’est comme rien passer avez vous une idée car cette solution me servira beaucoup et merci
Messages postés
239
Date d'inscription
mercredi 19 février 2003
Statut
Membre
Dernière intervention
17 janvier 2013
5
Bonjour,

Je pense que l'erreur vient du fait que les textbox ne sont pas bien formatés. Les textbox je les écris comme cela:
[mailto:pascal.aknouche@free.fr email: PascalCmoa]