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 :

Procédure stocké VB.net sous SQL Serveur 2005


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Par défaut Procédure stocké VB.net sous SQL Serveur 2005
    Bonjour à tous ceux qui voudront bien m'aider (et en moindre mesure aux autres )

    Comme ma présence doit le trahir, j'ai un petit problème que j'aimerai vous soumettre dans l'espoir que vous pouriez éclairer ma lanterne.

    Je dévellope une procédure stockée sous VB.net pour une base de donné SQL Serveur 2005, et je me sers de Visual Studio Pro 2005 pour déployer mes procédures stockées sur le serveur SGBD.

    Je vous soumet le code suivant qui a pour but de selectionner le contenue d'une table, et dans remplir une seconde avec les réponses générées par ma première requête.
    Ca donne 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
    Imports System
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.SqlTypes
    Imports Microsoft.SqlServer.Server
     
    Partial Public Class StoredProcedures
        <Microsoft.SqlServer.Server.SqlProcedure()> _
        Public Shared Sub transfertResultat(ByVal unnocourse As Integer)
            Using maConnexion As New SqlConnection("context connection = true")
                maConnexion.Open()
     
                Dim maCommande As SqlCommand = New SqlCommand("SELECT * FROM dbo.participer WHERE nocourse = " & unnocourse & " ORDER BY tpsrealise", maConnexion)
                '          SqlContext.Pipe.ExecuteAndSend(maCommande)
                Dim reader As SqlDataReader = maCommande.ExecuteReader
                Dim i As Integer
                i = 1
                While reader.Read()
     
                    Dim lacommande As SqlCommand = New SqlCommand("INSERT INTO dbo.classement (idcourse, idskieur, classement) VALUES (" & reader.GetValue(1).ToString & "," & reader.GetValue(0).ToString & "," & i & ")", maConnexion)
     
                    lacommande.ExecuteNonQuery()
                    i = i + 1
                End While
                reader.Close()
                maConnexion.Close()
            End Using
        End Sub
    End Class
    Cela me génère l'erreur suivante quand j'appel cette procédure sous SQL Serveur 2005 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Msg 6522, Niveau 16, État 1, Procédure transfertResultat, Ligne 0
    Une erreur .NET Framework s'est produite au cours de l'exécution de la routine ou de la fonction d'agrégation définie par l'utilisateur 'transfertResultat' : 
    System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.
    System.InvalidOperationException: 
       at System.Data.SqlClient.SqlInternalConnectionSmi.ValidateConnectionForExecute(SqlCommand command)
       at System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command)
       at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
       at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
       at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       at SqlServerProject1.StoredProcedures.transfertResultat
    Je n'ai aucune idée d'où cela peut provenir.
    Je vous remercie d'avance sur l'aide que vous pouriez me fournir aussi modeste soit elle.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 434
    Par défaut
    Bonjour,

    sauf erreur de ma part, je ne vois pas de procédure stockée dans le code posté.

    C'est tout simplement deux requetes SQL envoyées au serveur par VB .NET.

    Ai-je mal compris ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Par défaut
    Et bien en fait c'est une procédure stoké en VB.net qui est déployé à l'aide de Visual Studio 2005.

    Mais en fait le problème vient du fait que je n'arrive pas à executer deux requetes dans la même fonction. Soit il me dit que le datareader n'est pas fermé (pourtant je le ferme bien), soit si je gruge pour enregistrer tous les résultats de la premiere requete dans un tableau array, pour ensuite fermer la connexion et en ouvrir une nouvelle, et dans ce cas là il m'annonce que j'ai pas fermé ma premiere connection

  4. #4
    Membre Expert
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Par défaut
    Bonjour,

    Intéressant. C'est bien le code que tu exécutes que tu as copié-collé ? Tu crées bien une deuxième commande ?
    Tu sais que tu peux déboguer la sp (regarde mon article sur le sujet sur http://rudi.developpez.com/sqlserver...sprocsdotnet/).

    Je suppose qu'il y a autre chose dans ton code ? Sinon tu peux faire la même chose en T-SQL avec un INSERT INTO ... SELECT

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 16
    Par défaut
    salut tout le monde !
    bon la réponse est un peu tardive ... mais bon vaut mieux tard que jamais
    il faut activer la propriété MARS dans la connectionString de "maConnexion"
    il faut modifier la connexion associée au projet

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/04/2009, 09h24
  2. Importation sous SQL Serveur 2005 studio Express
    Par djilos dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/03/2008, 23h55
  3. Vb.net et sql serveur 2005
    Par matusa96 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 21/01/2007, 12h34
  4. [VB.net]Procédure stockée SQL-Serveur 2005
    Par champmart dans le forum Accès aux données
    Réponses: 2
    Dernier message: 27/11/2006, 14h05

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