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 :

Interroger une base de données SQL SERVER compact 3.5 [Débutant]


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut Interroger une base de données SQL SERVER compact 3.5
    Bonsoir,

    J'ai créer une base de données locale SQL SERVER compact 3.5 sous visual basic 2010 express.

    Ma base de données a été créé via Menu projet -> ajouter un nouvel élément -> Base de donnée locale et se nomme madatabase.sdf

    J'ai ajouté une table (nommée matable) en passant par l'explorateur de données.

    Cette table contient deux colonnes (ID et Mots). J'ai ajouté des données dans cette table via l'explorateur de données (afficher les données de la table)

    Mon problème est le suivant je souhaite lire cette table et récupérer le mot associé à l'ID identique à une variable déterminé (exemple: la variable s'appelle numero et est égale à 1 je veux donc récupérer le Mot ayant l'ID égal à la variable numero)

    Je débute avec les bases de données et suis bloqué à cette étape de lecture. Quel code dois-je écrire ?

    Merci de votre aide

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Tu as un tutoriel ici http://www.dotnetperls.com/sqlce


    Pour lire dans ta db l'enregistrement avec un certain id, tu fais un truc genre :

    Code C# : 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
     
    using (SqlCeConnection con = new SqlCeConnection(conString))
    {
        con.Open();
     
        using (SqlCeCommand com = new SqlCeCommand("SELECT * FROM MyTable where ID=@id", con))
        {
         com.Parameters.AddWithValue("@id", id);
              SqlCeDataReader reader = com.ExecuteReader();
              while (reader.Read())
             {
                 int num = reader.GetInt32(0); // a remplacer, dépendant de ce que tu veux lire
                Console.WriteLine(num);
              }
        }
    }

    Il y a aussi moyen d'utiliser EF : http://www.codeguru.com/csharp/artic...-35.htm#page-3
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Tu as un tutoriel ici http://www.dotnetperls.com/sqlce


    Pour lire dans ta db l'enregistrement avec un certain id, tu fais un truc genre :

    Code C# : 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
     
    using (SqlCeConnection con = new SqlCeConnection(conString))
    {
        con.Open();
     
        using (SqlCeCommand com = new SqlCeCommand("SELECT * FROM MyTable where ID=@id", con))
        {
         com.Parameters.AddWithValue("@id", id);
              SqlCeDataReader reader = com.ExecuteReader();
              while (reader.Read())
             {
                 int num = reader.GetInt32(0); // a remplacer, dépendant de ce que tu veux lire
                Console.WriteLine(num);
              }
        }
    }

    Il y a aussi moyen d'utiliser EF : http://www.codeguru.com/csharp/artic...-35.htm#page-3
    Bonjour GuruuMeditation,

    Merci pour ta réponse.

    J'ai oublié de préciser que je programme en vb.net donc le code et les liens que tu as indiqué ne correspondent pas à mon utilisation.

    As-tu la même chose pour le vb.net ?

    Merci

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Utilise un convertisseur de code, il y en a plein en cherchant "Convert C# to VB.NET". En voici un : http://www.developerfusion.com/tools.../csharp-to-vb/

    C'est un peu comme les traducteurs linguistiques, des fois il y a des convertions qui ne donnent pas le bon résultat, mais pour 90% des cas, ça fait le job.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Utilise un convertisseur de code, il y en a plein en cherchant "Convert C# to VB.NET". En voici un : http://www.developerfusion.com/tools.../csharp-to-vb/

    C'est un peu comme les traducteurs linguistiques, des fois il y a des convertions qui ne donnent pas le bon résultat, mais pour 90% des cas, ça fait le job.


    Merci DotNetMatt pour cette astuce.

    J'ai donc converti le code en 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
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Using con As New SqlConnection(conString)
                con.Open()
                Using com As New SqlCommand("SELECT * FROM MyTable where ID=@id", con)
                    com.Parameters.AddWithValue("@id", id)
                    Dim reader As SqlDataReader = com.ExecuteReader()
                    While reader.Read()
                        Dim num As Integer = reader.GetInt32(0) ' a remplacer, dépendant de ce que tu veux lire
                        Console.WriteLine(num)
                    End While
                End Using
            End Using
        End Sub
    Cependant à la compilation deux erreurs se produisent :

    La 1ère: A la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Using con As New SqlConnection(conString)
    le message est conString n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection.

    La 2ème: A la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.Parameters.AddWithValue("@id", id)
    le message est id n'est pas déclaré. Il peut être inacessible en raison de son niveau de protection.

    De plus, pouvez vous me dire quel doit être le code qui remplace la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim num As Integer = reader.GetInt32(0)
    si je veux récuperer dans la table à la colonne Mots le mot associé à l'ID identique à une variable déterminé (exemple: la variable s'appelle numero et est égale à 1 je veux donc récupérer le Mot ayant l'ID égal à la variable numero)

    Merci de votre aide

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Bonsoir,

    Jai cherché de mon côté et j'ai trouvé dans la doc ADO.net un exemple de code qui m'a aiguillé pour me connecté à ma database:

    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
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
     
            Dim requete, connexionString As String
            connexionString = "Data Source=|DataDirectory|\madatabase.sdf;Initial Catalog=madatabase;Integrated Security=false"
            requete = "SELECT * FROM matable"
            Dim connexion As IDbConnection = New SqlConnection(connexionString)
            Dim commande As IDbCommand = connexion.CreateCommand()
            commande.CommandText = requete
            commande.CommandType = CommandType.Text
            connexion.Open()
            Dim lire As IDataReader = commande.ExecuteReader()
            While (lire.Read())
                Console.WriteLine("ID : {0} | Mots : {1} |", lire.GetInt32(0), lire.GetString(1))
            End While
            connexion.Close()
            connexion.Dispose()
            Console.ReadLine()
     
        End Sub
    Ce code m'indique aucune erreur en compilation, cependant il n'est pas opérationnel puisqu'une erreur intervient à la ligne avec un message:

    "Une erreur liée au réseau ou spécifique à l'instance s'est produite lors de l'établissement d'une connexion à SQL Server. Le serveur est introuvable ou n'est pas accessible. Vérifiez que le nom de l'instance est correct et que SQL Server est configuré pour autoriser les connexions distantes. (provider: SQL Network Interfaces, error: 26 - Erreur lors de la localisation du serveur/de l'instance spécifiés)"

    Je pense que cette erreur vient de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connexionString = "Data Source=|DataDirectory|\madatabase.sdf;Initial Catalog=madatabase;Integrated Security=false"
    Je ne connais pas précisément le data source à indiqué puisque qu'il n'y a pas de serveur distant car c'est une base de donnée locale appelé madatabase.sdf avec une table liée appelée matable.

    Quelqu'un aurait il une idée où trouver le data source à indiqué ?

    Merci de votre aide.

  7. #7
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Utilise SqlCeConnection au lieu de SqlConnection, sinon il va essayer de trouver un SQL Server complet, et pas un CE
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Utilise SqlCeConnection au lieu de SqlConnection, sinon il va essayer de trouver un SQL Server complet, et pas un CE
    Bonjour GuruuMeditation,

    Merci pour ta réponse.

    J'ai appliqué ton conseil sur le code que tu m'as donné lors d'un précédent post

    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
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
            Dim conString As String
            Dim ID As SqlCeParameter
                conString = "Data Source=madatabase.sdf"
                Using con As New SqlCeConnection(conString)
                    con.Open()
                Using com As New SqlCeCommand("SELECT * FROM matable where ID=@id", con)
                    com.Parameters.AddWithValue("@id", ID)
                    Dim reader As SqlCeDataReader = com.ExecuteReader()
                    While reader.Read()
                        Dim num As Integer = reader.GetInt32(0) ' a remplacer, dépendant de ce que tu veux lire
                        Console.WriteLine(num)
                    End While
                End Using
            End Using
     
        End Sub
    Cependant une erreur se produit lors de l’exécution du programme.

    A la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim reader As SqlCeDataReader = com.ExecuteReader()
    un message d'erreur indique: La requête paramétrée « SELECT * FROM matable where ID=@id » attend une valeur de paramètre qui n'est pas fournie.
    Nom du paramètre : @id

    As tu une idée du problème ?


    Sinon j'ai essayé avec le code tiré de la doc ADO.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
    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
            Dim requete, connexionString As String
            connexionString = "Data Source=madatabase.sdf"
            requete = "SELECT * FROM matable"
            Dim connexion As IDbConnection = New SqlCeConnection(connexionString)
            Dim commande As IDbCommand = connexion.CreateCommand()
            commande.CommandText = requete
            commande.CommandType = CommandType.Text
            connexion.Open()
            Dim lire As IDataReader = commande.ExecuteReader()
            While (lire.Read())
                Console.WriteLine("ID : {0} | Mots : {1} |", lire.GetInt32(0), lire.GetString(1))
            End While
            connexion.Close()
            connexion.Dispose()
            Console.ReadLine()
     
        End Sub
    Une erreur se produit également lors de l'exécution du programme à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine("ID : {0} | Mots : {1} |", lire.GetInt32(0), lire.GetString(1))
    un message d'erreur indique: Le cast spécifié n'est pas valide.

    Merci de votre aide

  9. #9
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Est-ce que ID est NULL?? Si oui, tu dois passer DBNull.Value à la place.

    Si j'ai bien lu, ID est de type SQLParameter. ça ne devrait pas être un Int plutôt?
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Bonsoir GuruuMeditation,

    Merci pour ta réponse

    J'ai avancé dans la journée sur le programme et est appliqué quelques modifications

    Tout d'abord ma base de donnée est composée d'une table à 2 lignes avec ID=1 et Mots=ESSAI sur la première ligne et ID=2 et Mots=TEST sur la deuxième ligne

    Mon code est le suivant:

    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
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    Dim conString
            Dim numero As String
            numero = 1 'J'ai defini cette variable pour l'instant avec cette valeur mais celle ci par la suite sera une valeur défini en automatique suite à un test effectué plutôt dans le programme
            Dim ID As Integer
            conString = "Data Source=madatabase.sdf"
            Using con As New SqlCeConnection(conString)
                con.Open()
                Using com As New SqlCeCommand("SELECT * FROM matable where ID=@id", con)
                    com.Parameters.AddWithValue("@id", ID)
                    Dim reader As SqlCeDataReader = com.ExecuteReader()
                    While reader.Read()
                        'Dim num As Integer = reader.GetInt32(0) ' a remplacer, dépendant de ce que tu veux lire
                        Dim mot_selectionne As String = reader.GetValue(numero) ' Je veux afficher ici la valeur du mot équivalent à numero ex: dans ma table 0=1 1=ESSAI 2=1 et 3=TEST)
                        Console.WriteLine(mot_selectionne)
                        Console.Read()
                    End While
                End Using
            End Using
     
        End Sub
    Actuellement le programme en l'état me donne les résultats suivant :
    Si numero=0 alors affiché "0"
    Si numero=1 alors affiché "ESSAI"
    Si numero =2 ou 3 erreur avec message "L'index se trouve en dehors des limites du tableau". Je pense que ce message est lié au faite que les valeurs 2 et 3 ne correspondent pas à des cellules de la table

    Quelles doivent-être les valeurs finales de numero pour afficher l'ID de la première ligne de la table, le Mots de la première ligne de la table, l'ID de la deuxième ligne de la table, le Mots de la deuxième ligne de la table.

    Merci de ton aide

  11. #11
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Le numéro en paramètre dans GetString est l'index de la colonne. Vu que tu n'as que 2 colonnes, si tu mets un index 2 ou plus (La 1ere colonne à l'index 0) il va te retourner une erreur

    Pour afficher l'ID et le Mot de chaque ligne tu dois faire E GetString dans ta boucle de lecture, le 1er avec 0 comma paramètre, et le second avec 1
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Assistant commercial
    Inscrit en
    Août 2014
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant commercial

    Informations forums :
    Inscription : Août 2014
    Messages : 53
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    Le numéro en paramètre dans GetString est l'index de la colonne. Vu que tu n'as que 2 colonnes, si tu mets un index 2 ou plus (La 1ere colonne à l'index 0) il va te retourner une erreur

    Pour afficher l'ID et le Mot de chaque ligne tu dois faire E GetString dans ta boucle de lecture, le 1er avec 0 comma paramètre, et le second avec 1
    Bonjour GuruuMeditation,

    Merci pour ces précisions.

    Je les ai appliqué et cela fonctionne.

    Le code final:

    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
    Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
     Dim conString
            Dim numero As Integer
            numero = 2 'J'ai defini cette variable pour l'instant avec cette valeur mais celle ci par la suite sera une valeur défini en automatique suite à un test effectué plutôt dans le programme
            Dim ID As Integer = numero
            conString = "Data Source=madatabase.sdf"
            Using con As New SqlCeConnection(conString)
                con.Open()
                Using com As New SqlCeCommand("SELECT * FROM matable where ID=@id", con)
                    com.Parameters.AddWithValue("@id", ID)
                    Dim reader As SqlCeDataReader = com.ExecuteReader()
                    While reader.Read()
                        Console.WriteLine("ID : {0} | Mots : {1} |", reader.GetValue(0), reader.GetString(1))
                        Console.Read()
                    End While
                End Using
            End Using
        End Sub
    Un grand MERCI à toi pour m'avoir aidé sur ce sujet

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

Discussions similaires

  1. [Débutant] Choix entre une base de données Sql server et Sql server compact
    Par hugnka dans le forum VB.NET
    Réponses: 2
    Dernier message: 28/05/2012, 22h45
  2. Réponses: 1
    Dernier message: 17/12/2007, 12h08
  3. Importation d'une base de donnée sql server vers oracle
    Par delphy456 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/01/2006, 14h44
  4. Réponses: 3
    Dernier message: 01/09/2005, 16h24
  5. Réponses: 3
    Dernier message: 29/03/2004, 18h02

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