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 :

[VB.net]Procédure stockée SQL-Serveur 2005


Sujet :

Accès aux données

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10
    Points : 8
    Points
    8
    Par défaut [VB.net]Procédure stockée 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
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    les datareaders sont exclusifs sur leur connection donc tu es obligé de travailler avec deux connexions pour faire ce que tu veux.
    Par ailleurs, tu devrais utiliser des paramètres car en l'état ton code présente une énorme faille de sécurité.

  3. #3
    Membre actif
    Inscrit en
    Janvier 2004
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 208
    Points : 227
    Points
    227
    Par défaut
    en plus tu drevrais utilisé une requete d'insertion de valeur ce qui t'evitera d'ouvrir une deuxieme command.

Discussions similaires

  1. [2005] Procédure stockée sql server 2005
    Par Gbedjanhoungbo Jean dans le forum Développement
    Réponses: 2
    Dernier message: 25/08/2013, 17h15
  2. Performance de des procédures stockée SQL Serveur
    Par tawrirte dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/10/2011, 06h46
  3. Réponses: 0
    Dernier message: 05/01/2008, 18h20
  4. Réponses: 1
    Dernier message: 04/03/2007, 15h40

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