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

Accès aux données Discussion :

Comment executer une procédure stockée (avec paramètre en entrée) en VB.Net ?


Sujet :

Accès aux données

  1. #1
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut Comment executer une procédure stockée (avec paramètre en entrée) en VB.Net ?
    Bonjour,
    je bloque sur l'execution d'une procedure stockée en VB.Net :
    Voici ma procédure stockée :
    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
     
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go
     
     
     
    -- =============================================
    -- Author:		<
    -- Create date: <17/12/2008>
    -- Description:	<Permet de"charger" dans T_ExtraitDISoldées les Serial pour l'appli RobotIndicateurTestFianl>
    -- =============================================
    ALTER PROCEDURE [dbo].[sgm_ExtraitNSPFinTestFinal]
    	-- Add the parameters for the stored procedure here
    	@ListeNS as nvarchar(1024)	
    AS
     
    -- Vide la table 
    DELETE FROM T_ExtraitDISoldees  --Je vide ma table au préalable.
     
     
    INSERT INTO T_ExtraitDiSoldees(DI,Ns_NewPfin,Ns_PFin,DateSolde,Code_NewPFIN,Defaut_Client,Statut_DI,
    			Famille,Ns_CIE,Date_DI)
    SELECT  infoDI.DI, NS_NewPFin, NS_PFin,Date_SoldeSAP, Code_NewPFIN,CodeDefaut,Statut,Famille,Ns_CIE,Date_DI
    FROM data_rgw.dbo.infoDI infoDI 
    INNER JOIN ( SELECT MAX(Date_DI) AS maxDate, DI  FROM data_rgw.dbo.infoDI  GROUP BY DI ) s 
    ON infoDI.DI = s.DI AND infoDI.Date_DI = s.maxDate
    WHERE infodi.Ns_PFin IN (@ListeNS) 
    ORDER BY Date_DI DESC
    La requête en elle-même marche. Je l'ai testé avec le paramètre que j'essaie de lui passer :
    '023000079220','023000103905','023000093379','023000095317','023000084428','808062019856','808054018825',
    '023000079220','023000103905','023000093379','023000095317','023000084428','023000096190','808062019856',
    '808054018825','507486013221','808034048129','808024019361'

    Quand je remplace @ListeNS dans la requête elle me retourne bien des enreg.
    Par contre, quand je lance mon appli et que je passe par VB.Net donc, elle ne me retourne aucun enregistrement....

    Voici mon code VB.Net (qui plante puisque c'est pas la requête ):
    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
     
    cnE = New SqlConnection(MainForm.sChaineConnexion2)
     
    cnE.Open()
     
    commandE = New SqlCommand(sNomProcedure, cnE)
     
    commandE.CommandText = sNomProcedure
    commandE.CommandTimeout = 120
    commandE.CommandType = CommandType.StoredProcedure
    If Not vParametre = "" Then
    Dim oParam As SqlParameter = commandE.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ListeNS", System.Data.SqlDbType.NVarChar, 1024))
                oParam.Value = vParametre  'contient bien la bonne valeur
    End If
    commandE.ExecuteNonQuery()
     
    ExecuteProcedureStocke = True
    msMsgConnexion = "ExecuteProcedureStocke OK"
     
    cnE.Close()
    cnE = Nothing
    Je pense que c'est au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim oParam As SqlParameter = commandE.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ListeNS", System.Data.SqlDbType.NVarChar, 1024))
    Mais je ne sais pas comment controler s'il passe le paramètre ou non à ma variable @ListeNS ...

    Merci d'avance pour votre aide...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Essaie d'appeler ta procédure stockée manuellement dans SQL Server, à mon avis ça ne marche pas... Si c'est comme dans Oracle, tu ne peux pas mettre en paramètre le contenu d'un IN

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    1-Utilise SQL Server Profiler pour capturer la chaine qui est passer à SQL Serveur.

    2-J'ai noté que tu ouvres ta connection très tôt et tu la refermes très tard.
    Alors que c'est l'inverse qu'il faut faire.L'avantage est que cela permet de libérer le pool de connexions et donc te permet de desservir plus de requêtes.

    Une grande règle dans l'optimisation des applications est d'occuper tardivement les ressources disques, les connexions aux bases de données, les sockets ... mais les liberer aussitôt que vous avez fini de travailler dessus.

    Tu aurais écris :

    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
    cnE = New SqlConnection(MainForm.sChaineConnexion2)
    commandE = New SqlCommand(sNomProcedure, cnE)
    commandE.CommandText = sNomProcedure
    commandE.CommandTimeout = 120
    commandE.CommandType = CommandType.StoredProcedure
    If Not vParametre = "" Then
    Dim oParam As SqlParameter = commandE.Parameters.Add(New System.Data.SqlClient.SqlParameter("@ListeNS", System.Data.SqlDbType.NVarChar, 1024))
                oParam.Value = vParametre  'contient bien la bonne valeur
    End If
    cnE.Open()
    commandE.ExecuteNonQuery()
    cnE.Close()
    cnE = Nothing
     
    ExecuteProcedureStocke = True
    msMsgConnexion = "ExecuteProcedureStocke OK"

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2005
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 337
    Points : 120
    Points
    120
    Par défaut
    j'apprends à manipuler les procédures stockées et je ne comprends pas encore l'appel d'une procédure en vb.net.
    je développe avec vb 2008 et je veux afficher les résultats d'une procédure stockée dans un datagridview.

    voilà la procédure stockée sous sql server

    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
    -- ================================================
    -- Template generated from Template Explorer using:
    -- Create Procedure (New Menu).SQL
    --
    -- Use the Specify Values for Template Parameters 
    -- command (Ctrl-Shift-M) to fill in the parameter 
    -- values below.
    --
    -- This block of comments will not be included in
    -- the definition of the procedure.
    -- ================================================
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:		<Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:	<Description,,>
    -- =============================================
    CREATE PROCEDURE RechercheDeSuspect
    	-- Add the parameters for the stored procedure here
    	@ValSusPect Nvarchar(100)
    AS
    BEGIN
    	-- SET NOCOUNT ON added to prevent extra result sets from
    	-- interfering with SELECT statements.
    	SET NOCOUNT ON;
    	SET @ValSusPect = '%' + @ValSusPect + '%'
        -- Insert statements for procedure here
    	SELECT     NumeroDossier, DatePlainte, NomVictime, PrenomVictime, DnVictime, SexeVictime, TelVictime, MailVictime,
    			   PaysNationaliteVictime, PaysResidence, SmVictime, TypeArnaque, MailSuspect
    FROM         dbo.t_affaire
    WHERE     (MailSuspect Like @ValSusPect)
    END
    GO
    la procédure s'exécute sans problème dans sql server.
    si c'est possible d'afficher les résultats de la procédure, je vous prie de me donner le code sinon j'aimerais savoir ce que j'en fais

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Cherches un peu sur le forum, il y'a plein de ressources en ligne :

    Voici un example de la msdn

    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
    Dim sConnectionString As String = _
     "server=localhost;uid=sa;pwd=;database=Northwind"
    Dim cnNorthwind As New SqlConnection(sConnectionString)
    Dim cmdOrders As New SqlCommand("CustOrderHist", cnNorthwind)
    cmdOrders.CommandType = CommandType.StoredProcedure
    ' Définir paramètre pour la procédure stockée 
    Dim prmCustomerID As New SqlParameter()
    prmCustomerID.ParameterName = "@CustomerID"
    prmCustomerID.SqlDbType = SqlDbType.VarChar
    prmCustomerID.Size = 5
    prmCustomerID.Value = "ALFKI"
     
    cmdOrders.Parameters.Add(prmCustomerID)
     
    Dim daGetOrders As New SqlDataAdapter(cmdOrders)
    Dim dsOrders As New DataSet()
    daGetOrders.Fill(dsOrders, "Orders")
    DataGrid1.DataSource = dsOrders.Tables("Orders")
     
    cmdOrders.Parameters.Add(prmCustomerID)
     
    Dim daGetOrders As New SqlDataAdapter(cmdOrders)
    Dim dsOrders As New DataSet()
    daGetOrders.Fill(dsOrders, "Orders")
    DataGrid1.DataSource = dsOrders.Tables("Orders")

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Il cherche surtout à passer une liste de valeur à une procédure stockée pour générer un IN je me trompe?

    Si c'est le cas pensez au TVP:
    http://msdn.microsoft.com/en-us/libr...=sql.105).aspx

    Quelle est votre version de SQL SERVER?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

Discussions similaires

  1. [Débutant] Appel d'une procédure stockée avec paramètres
    Par Bakkach dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/10/2012, 16h41
  2. [CR XI] Utilisation d'une procédure stockée avec paramètre(s)
    Par ferranzo dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 08/09/2011, 20h26
  3. executer une procédure stockée avec cx_oracle
    Par awalter1 dans le forum Général Python
    Réponses: 6
    Dernier message: 02/12/2010, 15h23
  4. Executer une procedure stockée avec paramètre
    Par SonnyFab dans le forum ASP.NET
    Réponses: 6
    Dernier message: 11/08/2010, 12h07
  5. Lancement d'une procédure stockée avec paramètres
    Par ptitenana_vtq dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 08/06/2010, 15h16

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