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

MS SQL Server Discussion :

récupération d'une valeur output en vb.net


Sujet :

MS SQL Server

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut récupération d'une valeur output en vb.net
    Bonjour tous le mande, je viens de commencer avec les procédure stocké, et j'ai déjà eu des problème.
    je veux faire une simple insertion dans une table et je faire vérifier si l'insertion est passé, si oui je veux récupérer l' id de la ligne insérer.
    ce que j'ai fait:
    procédure stocké:
    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
     
    -- =============================================
    -- Author:		Mustapha
    -- Create date: 07/09/2009
    -- Description:	Insertion dans la table article_info pour le back office
    -- =============================================
    ALTER PROCEDURE [dbo].[article_info_insert]
    	-- Add the parameters for the stored procedure here
    	@photo varchar(150),
    	@titre varchar(max),
    	@description varchar(max),
    	@id_categorie tinyint,
    	@dat datetime,
    	@id_admin tinyint
            @lastInsert int output
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	Insert Into article_info (photo, titre, description, id_categorie, dat, id_admin)
    	Values (@photo, @titre, @description, @id_categorie, @dat, @id_admin)
    	if @@error <> 0 
    	select @lastInsert=@@identity 
    	--select @lastInsert = scope_identity()
     
    END
    et dans le 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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Imports System.Data.SqlClient
    Imports System.Data
    Partial Class back_actualite
        Inherits System.Web.UI.UserControl
     
        Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_vider.Click
            Text_titre.Text = ""
            Text_detail.Text = ""
        End Sub
     
        Protected Sub Button_valider_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button_valider.Click
     
            Dim con As New SqlConnection("ma chaine de connexion")
            'La chaine de connexion
            Dim cmd As SqlCommand
            'déclarer la commande
            cmd = New SqlCommand("article_info_insert", con)
            'appel de la procédure stocké
            cmd.CommandType = CommandType.StoredProcedure
            cmd.Parameters.Add("@photo", SqlDbType.VarChar, 150)
            cmd.Parameters.Add("@titre", SqlDbType.VarChar, 150)
            cmd.Parameters.Add("@description", SqlDbType.VarChar, 150)
            cmd.Parameters.Add("@id_categorie", SqlDbType.TinyInt)
            cmd.Parameters.Add("@dat", SqlDbType.DateTime)
            cmd.Parameters.Add("@id_admin", SqlDbType.TinyInt)
            Dim p As SqlParameter = cmd.Parameters.Add("lastInsert", SqlDbType.Int)
            'déclaration des variable de la procédure stocké
            con.Open()
            'ouverture de la connexion
            If FileUpload_image.HasFile = False Then
                cmd.Parameters("@photo").Value = "default.jpg"
            Else
                cmd.Parameters("@photo").Value = FileUpload_image.FileName
            End If
            cmd.Parameters("@titre").Value = Text_titre.Text
            cmd.Parameters("@description").Value = Text_detail.Text
            cmd.Parameters("@id_categorie").Value = 1
            cmd.Parameters("@dat").Value = Date.Now
            cmd.Parameters("@id_admin").Value = 1
     
            'l'affectation des valeurs des variables de procédure stocké
            cmd.ExecuteNonQuery()
            'exécution de la procédure stocké
     
     
     
            'fémeture de la connexion
        End Sub
    End Class
    mais je sais pas quoi faire en suite pour récupérer mon id

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    Ce sujet vous aidera sûrement

    @++

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 44
    Par défaut
    j'ai trouvé la solution. en faite c'est moi qui a fait l erreur. dans la condition if apres l'insertion j'ai met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if @@error<>0
    set @lastInsert = @@Identity
    return @lastInsert
    alors que après une insertion réussi, il va pas rentrer dans la condition car @@error = 0
    donc voila le code complet pour les gens qui ont le même besoin
    procédure stocké:
    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
     
    -- =============================================
    -- Author:		Mustapha
    -- Create date: 07/09/2009
    -- Description:	Insertion dans la table article_info pour le back office
    -- =============================================
    ALTER PROCEDURE [dbo].[article_info_insert]
    	-- Add the parameters for the stored procedure here
    	@photo varchar(150),
    	@titre varchar(max),
    	@description varchar(max),
    	@id_categorie tinyint,
    	@dat datetime,
    	@id_admin tinyint
            @lastInsert int output
     
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
     
    	INSERT INTO article_info (photo, titre, description, id_categorie, dat, id_admin)
    	VALUES (@photo, @titre, @description, @id_categorie, @dat, @id_admin)
    	IF @@error = 0 
    	SELECT @lastInsert=@@identity 
    	--select @lastInsert = scope_identity()
     
    END
    vb.net:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dim con as new sqlconnection("chaine de connexion")
    dim cmd as sqlcommand 
    cmd = new sqlcommand("article_info_insert", con)
    dim p as sqlparameter = cmd.parameters.add("@lastInsert", sqltype.int)
    p.direction = parameterdirecion.output
    con.open
    msgbox(p.value.tostring)

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Préférez SCOPE_IDENTITY() à @@IDENTITY.
    En effet SCOPE_IDENTITY() est limitée au module SQL (procédure stockée, trigger, ou lot d'instructions) qui a réalisé l'insertion.
    Ce n'est pas le cas de @@IDENTITY, qui vous retournera la valeur du dernier incrément, quel que soit le module exécuté (par exemple une autre procédure stockée exécutée en même temps que la vôtre) ...

    @++

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

Discussions similaires

  1. [ASP.NET]Récupération d'une valeur SQL
    Par Mictou dans le forum ASP.NET
    Réponses: 0
    Dernier message: 02/12/2009, 12h43
  2. Réponses: 6
    Dernier message: 05/01/2006, 16h37
  3. [XSL] récupération d'une valeur
    Par Mike35 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 14/12/2005, 15h58
  4. Réponses: 2
    Dernier message: 03/11/2005, 15h03
  5. récupération d'une valeur dans une variable
    Par jh0483 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/08/2005, 09h49

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