IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Appel de procédure stockée


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Points : 57
    Points
    57
    Par défaut Appel de procédure stockée
    Bonjour,

    Je veux insérer une ligne avec les paramètres en entrées et un paramètre qui sera la clé au retour.

    Donc voici ma proc en SQL Server 2005
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    BEGIN 
        SET NOCOUNT ON 
        INSERT INTO TESTSCOPE 
        ( 
            NOM,
            PRENOM 
        ) 
        VALUES 
        ( 
            @param1,
            @param2
        ) 
        SELECT NEWID = SCOPE_IDENTITY() 
    END
    Voici mon code vb.net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Dim connectString As String = "Data Source=XXX;Initial Catalog=MaBd;User ID=MonUser;Password=MyPWD"
     
    Dim connection As SqlConnection = New SqlConnection(connectString)
            Try
     
                connection.Open()
                Dim cmd As SqlCommand = New SqlCommand()
                cmd.CommandType = CommandType.StoredProcedure
                cmd.CommandText = "ProcidTest"
                With cmd.Parameters
                    .Add(New SqlParameter("@Param1", TextBox2.Text))
                    .Add(New SqlParameter("@Param2", TextBox1.Text))
                    .Add(New SqlParameter("@Lastid", SqlDbType.Int))
                End With
                cmd.Parameters("@Param1").Direction = ParameterDirection.Input
                cmd.Parameters("@Param2").Direction = ParameterDirection.Input
                cmd.Parameters("@Lastid").Direction = ParameterDirection.ReturnValue
     
                cmd.Connection = connection
     
                cmd.ExecuteNonQuery()
                TextBox3.Text = cmd.Parameters("@Lastid").Value
     
            Catch ex As Exception
     
            Finally
                connection.Close()
                connection.Dispose()
                connection = Nothing
            End Try
    Mon problème est que je ne reçois jamais la valeur du identity dans TextBox3.Text du paramètre @Lastid.

    Quelqu'un peut m'aider ?

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour,

    Je pense qu'il te manque un curseur pour lire la réponse de ta requête.

    Je ne sais pas où tu crées ton paramètre @last.

    essaye cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Dim connectString As String = "Data Source=XXX;Initial Catalog=MaBd;User ID=MonUser;Password=MyPWD"
     
    Dim connection As SqlConnection = New SqlConnection(connectString)
            Try
     
                connection.Open()
                Dim cmd As SqlCommand = New SqlCommand()
                cmd.CommandType = CommandType.StoredProcedure
                cmd.CommandText = "ProcidTest"
                With cmd.Parameters
                    .Add(New SqlParameter("@Param1", TextBox2.Text))
                    .Add(New SqlParameter("@Param2", TextBox1.Text))
                    .Add(New SqlParameter("@Lastid", SqlDbType.Int))
                End With
                cmd.Parameters("@Param1").Direction = ParameterDirection.Input
                cmd.Parameters("@Param2").Direction = ParameterDirection.Input
                cmd.Parameters("@Lastid").Direction = ParameterDirection.ReturnValue
     
                cmd.Connection = connection
     
    dim curseur as SqlDataReader = cmd.executeReader()
     
    If curseur.read() then
    TextBox3.Text = (curseur.GetInt32(0).tostring())
    end if
     
    curseur.close()
     
                'cmd.ExecuteNonQuery()
                'TextBox3.Text = cmd.Parameters("@Lastid").Value
     
            Catch ex As Exception
     
            Finally
                connection.Close()
                connection.Dispose()
                connection = Nothing
            End Try

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    Il faut que tu fasses un return avec l'élément dans la procédure stockée sinon tu ne recevra rien. Ne pas confondre valeur de retour (Return) et valeur de sortie (OUTPUT).

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 155
    Points : 25 074
    Points
    25 074
    Par défaut
    le return n'est pas obligatoire, le plus simple est de finir par un select comme c'est fait et dans ce faire executereader ou executescalar à la place de executenonquery
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    le return n'est pas obligatoire, le plus simple est de finir par un select comme c'est fait et dans ce faire executereader ou executescalar à la place de executenonquery
    et vis à vis de la déclaration de ces paramètres ?
    sinon je suis d'accord autant faire un executescalar, c'est tout de même fait pour ça.

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 155
    Points : 25 074
    Points
    25 074
    Par défaut
    oui j'avais pas regardé tout le code

    soit finir par un select / executescalar et ne pas déclarer de parametre pour l'identity créé

    soit déclarer le paramètre de sortie avec le mot clé out
    on ne voit pas la déclaration des paramètres dans la procédure stockée donc on ne peut pas dire si c'est là qu'il a fait une erreur (surement le cas, on ne voit d'autre paramètre @ dans le code)
    et dans ce cas un executenonquery fonctionne sans qu'il y ait un select dans la SP (un SET suffit)

    et le parameters dans .net doit etre de type inputouput je crois

    m'enfin avec les paramètres c'est quand même moins simple à écrire
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    on ne voit pas la déclaration des paramètres dans la procédure stockée donc on ne peut pas dire si c'est là qu'il a fait une erreur (surement le cas, on ne voit d'autre paramètre @ dans le code)
    L'insert fonctionne mais je ne recois pas de valeur, donc mes parametres en entrés doivent etre bon. C'est au retour que je recois rien. Pour l'instant je ne peux tester car je ne suis pas sur mon ordi mais je vous donne des news.

    Merci

  8. #8
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 126
    Points : 94
    Points
    94
    Par défaut
    Salut

    Il faut declarer les parametres que tu veux voir modifier en output :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim param As New SqlClient.SqlParameter("wo_workorderno", "none")
                param.Direction = ParameterDirection.InputOutput
                param.Size = 6
    Apres tu peux lire ton parametre comme tu le fais.

    Bien evidemment tu dois avoir declarer dans ta SP SQL ton parametre en output

    Salut

    Ju
    Distillers Road --> Stronger Than Aquarius

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 72
    Points : 57
    Points
    57
    Par défaut
    Ca fonctionne. J'ai prit mon code tel quel et j'ai fait un executeScalar. Je recois l'autonumber.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/02/2006, 00h11
  2. Réponses: 3
    Dernier message: 17/01/2006, 17h12
  3. Update appelant une procédure stockées
    Par meufeu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 06/10/2005, 18h31
  4. [appeler une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 10/03/2005, 22h38
  5. Appel de Procédure stockée en ASP
    Par James85 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 14/11/2004, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo