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 :

Lire une valeur dans ma bdd, et une erreur inutile !


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut Lire une valeur dans ma bdd, et une erreur inutile !
    Bonjour, en suivant l'exemple suivant :

    Exemple d'extraction de données avec l'objet DataReader
    Imports System
    Imports System.Data.SqlClient
    Imports System.IO


    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
    Namespace ExempleAdoNetVBNET
        Public Class CommandeSQL
            Public Shared Sub Main()
                Dim strConnexion As String = "Data Source=localhost; Integrated Security=SSPI;" + "Initial Catalog=Northwind"
                Dim strRequete As String = "SELECT CategoryID, CategoryName FROM Categories;" + "SELECT EmployeeID, LastName FROM Employees"
                Try
                    Dim oConnection As New SqlConnection(strConnexion)
                    Dim oCommand As New SqlCommand(strRequete, oConnection)
                    oConnection.Open()
                    Dim oReader As SqlDataReader = oCommand.ExecuteReader()
                    Do
                        Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oReader.GetName(0), oReader.GetName(1))
                        While oReader.Read()
                            Console.WriteLine(ControlChars.Tab + "{0}" + ControlChars.Tab + "{1}", oReader.GetInt32(0), oReader.GetString(1))
                        End While
                    Loop While oReader.NextResult()
                    oReader.Close()
                    oConnection.Close()
                Catch e As Exception
                    Console.WriteLine(("L'erreur suivante a été rencontrée :" + e.Message))
                End Try
            End Sub 'Main        
        End Class 'CommandeSQL    
    End Namespace 'ExempleAdoNetVBNET



    J’ai fais sa :


    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
    Imports System
    Imports System.Data.SqlClient
    Imports System.IO
     
     
        Public Class CommandeSQL
     
                Private Connect AS new sqlconnection
                Private cmd as new sqlcommand
                Private MyRead as sqlDataRead
     
     
    Sub new()
             connect.connectionString = "serveur=toto;database=test;Persist Security info=false; integrated security=sspI;"
     
     
    Public sub ouverture()
    connect.open()
    cmd.connection = connect
    end sub
     
    Public sub Fermetur()
    connect.close()
    end sub
     
    Public sub Requette(Byval Requette As String)
    cmd.commandtext=marequette
    Myreader = cmd.executeReader()
    end sub
    end sub
      End Class

    Et dans mas page, je veux simplement récupéré l’id le plus grand de ma table. Je fais:

    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
    Private maconnexion as new connexion
     
    blabla....
     
    maconnexion.ouverture()
    maconnexion.requette("SELECT MAX(id) AS idmax FROM Gamme")
     
    Try
        tbid.text = maconnexion.myReader.getstring(1)
    catch ex as exeption
    toto.text = ex.message
    end try
     
    maconnexion.myreader.close()
     
    blabla...
    J’établi une connexion a la base, mais le catch renvoi :"tentative non valide de lecture lorsque aucune donnée n'est pressante." Pour temps, il y a des entré dans ma base, il y en a 5. Avez vous une idée pour résoudre mon problème, car je ne c’est pas quoi chercher dans Google (tout ce que je trouve, indique que sa devrai marcher.

    Merci d’avance.

    Dr_shaman

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 173
    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 173
    Points : 25 113
    Points
    25 113
    Par défaut
    tu n'utilises pas le reader comme il faut ...

    le reader permet de retourner 0 une ou plusieurs lignes, on ne le sait pas à l'avance
    une fois la requete executée, il faut parcourir les lignes une à une un peu comme un curseur via l'instruction .read

    .read retourne true s'il a reussi à se placer sur une ligne
    suite à executereader, si .read retourne false ca veut dire qu'aucune ligne ne correspond à la requete
    sinon il est en général dans une boucle while

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while monreader.read
      ' traitement
    end while
    donc le traitement sera fait tant qu'il y a des lignes, arrivée à la dernière, .read retourne false

  3. #3
    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 754
    Points
    39 754
    Par défaut
    En complément de la réponse de sperot51 :
    L'index de la première colonne est 0, et non 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbid.text = maconnexion.myReader.getstring(0)

  4. #4
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut merci
    merci pour votre aide, j'avais mal comprit le principe du reader. merci à vous.

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

Discussions similaires

  1. [XL-2000] Remplir une valeur dans cellule à partir d'une valeur precise d'un fichier texte
    Par cactus666 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/01/2010, 10h31
  2. insérer une valeur dans la bdd
    Par Kougar63 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/07/2009, 15h14
  3. [VB2008E] Où stocker une valeur dans les items d'une combobox ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 19h14
  4. Réponses: 1
    Dernier message: 14/11/2007, 11h53
  5. Récupérer une valeur dans un champ d'une autre table
    Par Kareg dans le forum Modélisation
    Réponses: 15
    Dernier message: 24/10/2007, 14h16

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