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 :

VB Express 2010 - SQL Server Compact - Insertion de données en code [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 38
    Par défaut VB Express 2010 - SQL Server Compact - Insertion de données en code
    Bonjour tout le monde.

    Habituellement, je fais des requête à l'aide de SQLPlus puis importe et gère les données à l'aide de macros sous Excel.
    Néanmoins, je me rends compte qu'un grand nombre de données rends l'exécution des macros sous Excel assez lente et la consultation des données fastidieuse.
    Je me suis donc décidé à passer à VB.Net avec Visual Basic Express 2010.

    J'ai recherché et suivi des tutoriels afin de créer une base de données locale, avec SQL Serveur Compact, qui semble correspondre tout à fait à ce genre de travaux.
    Mais me voici bloqué (déjà) à l'insertion des données dans la BDD...

    Pour résumé ce que je veux faire, il s'agit donc de recueillir les données obtenues au format "txt" pour les mettre dans cette BDD locale.
    J'ai donc créé un DataSet, puis créé plusieurs tables. Et maintenant, j'essaye d'entrer certaines des données recueillies dans une des tables.
    J'ignore si la méthode que j'utilise est la bonne. En tout cas, je vous remercie par avance pour toute aide ou suggestion.

    Voici le code utilisé actuellement (il me met une erreur sur le '.Add' mais j'ignore comment la corriger) :
    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
    Imports System.IO
     
    Module Procedures
     
        ''' <summary>
        ''' Procédure permettant d'ouvrir et d'insérer les données provenant de la requête.
        ''' </summary>
        ''' <remarks></remarks>
        Sub Insertion_Resultats_Requete()
     
            Const resultats_540 As String = "D:\Coffre\Travail\3-Requetes\021-0000540\Resultats_540.txt"
     
            Dim tmp_ligne() As String
            Dim debut_resultats As Boolean = False
     
            For Each ligne As String In File.ReadLines(resultats_540)
                If debut_resultats Then
                    tmp_ligne = Split(ligne, ";")
                    _540_BDDDataSet.Infos_DRGDataTable.Add(tmp_ligne(24),
                                                           tmp_ligne(25),
                                                           tmp_ligne(26),
                                                           tmp_ligne(27),
                                                           tmp_ligne(28),
                                                           tmp_ligne(29),
                                                           tmp_ligne(30),
                                                           tmp_ligne(4) & tmp_ligne(12)
                                                           )
                Else
                    debut_resultats = ligne.Contains("NORME")
                End If
            Next
     
        End Sub
     
    End Module

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    si tu as un message d'erreur, ne crois tu pas qu'il serait utile de préciser lequel ici ?

    je ne suis pas très dataset donc je ne pourrais t'aider à ce niveau là, ce n'est pas la meilleure manière de faire (ce n'est pas forcément une mauvaise manière non plus, disons que c'est la méthode des débutants)
    l'autre méthode plus directe (le dataset est une surcouche) c'est de faire une requete
    à adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim cmd = monsqlceconnection.createcommand
    cmd.commandtext = "insert into nomtable (col1,col2) values (@col1, @col2)"
    cmd.parameters.add("@col1",type)
    cmd.parameters.add("@col2",type)
    for each line in lignesfichier
      cmd.parameters("@col1").value = ...
      cmd.parameters("@col2").value =...
      cmd.executenonquery
    next
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 38
    Par défaut
    Oui, excuse moi.

    L'erreur indiquée est 'Add' n'est pas un membre de 'Gestion_540._540_BDDDataSet.Infos_DRGDataTable'.

    En tout cas, merci pour ta réponse, je vais essayer d'adapter le code que tu as mis.
    Mais une question de prime abord dans ce cas : pour la déclaration 'dim cmd = monsqlcconnection.createcommand', où puis-je trouver le nom de 'monsqlconnection'?
    (j'imagine que ce n'est pas le nom du dataSet donc, je vais faire des recherches mais préfère poser la question tout de suite au cas où)


  4. #4
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 38
    Par défaut
    Bonjour,

    Je reviens vers vous car j'ai légèrement avancé dans la résolution de mon problème, mais je reste bloqué au moment crucial qu'est la création de la connection.

    Donc, par rapport à précédemment, voici ce que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Dim myConnection As SqlClient.SqlConnection = _
                New SqlClient.SqlConnection("Data Source=BDD540.sdf")
            Dim MyCommand = myConnection.CreateCommand
    Ce qui fait (j'imagine que l'erreur est causée par la première ligne du code ci-desssus) que j'ai une erreur en arrivant à cette ligne :

    Citation Envoyé par Message de l'erreur
    L'exception System.Data.SqlClient.SqlException n'a pas été gérée
    Class=20
    ErrorCode=-2146232060
    LineNumber=0
    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: Named Pipes Provider, error: 40 - Impossible d'ouvrir une connexion à SQL Server)
    Number=53
    Server=""
    Source=.Net SqlClient Data Provider
    State=0
    Merci d'avance pour votre aide, il est difficile de trouver sur le net le moyen de déclarer correctement la connection avec sql server compact et visual basic express 2010. J'imagine qu'il s'agit certainement d'une évidence et que je passe à côté.

  5. #5
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Je ne connais pas trop SQL Server Compact, j'imagine au vu de la connexion qu'il s'agit d'un simple fichier, un peu comme access.

    Du coup...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim myConnection As SqlClient.SqlConnection = _
                New SqlClient.SqlConnection("Data Source=BDD540.sdf")
    Moi comme ça, je me dis, qu'il ne va jamais le trouver le fichier si tu ne lui mets pas le chemin absolu, un truc du genre :


  6. #6
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 38
    Par défaut
    Merci pour cette suggestion, je viens de tester mais malheureusement, cela ne change rien, l'erreur est toujours la même.

  7. #7
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Re,

    J'avais pas fais gaffe, mais tu utilises des objets de connexion (SQLConnection, SQLClient).
    Or ces objets sont fait pour ce connecter à SQL Server.

    Pour ce connecté à du compact, tu dois ajouter en référence à ton projet System.Data.SqlServerCe.dll
    Et derrière tu utilises les objets : SqlCeConnection, SqlCeCommand etc...

    Normalement, c'est fait pour des appareils mobiles, mais bon...

  8. #8
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 38
    Par défaut
    Merci pour l'aide apportée jusque là!

    Une dernière question concernant ce sujet, lorsque j'essaye, tout semble fonctionner, mais quand je souhaites voir les éléments enregistrés à partir de l'explorateur de données, il me montre une table vide.

    Me manque-t-il une instruction pour sauvegarder la BDD ou est-ce normal?

    Voici mon code actuellement :

    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
    37
    38
    39
    40
    41
    42
    43
    Imports System.IO
     
    Module Procedures
     
        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Sub Insertion_Resultats()
     
            Const resultats_540 As String = "D:\Coffre\Travail\3-Requetes\021-0000540\Resultats_540.txt"
     
            Dim tmp_ligne() As String
            Dim debut_resultats As Boolean = False
            Dim myConnection As SqlServerCe.SqlCeConnection = New SqlServerCe.SqlCeConnection("Data Source=BDD540.sdf")
            Dim MyCommand = myConnection.CreateCommand
            Dim myRequete As String
            Dim compteur As Integer = 0
     
            For Each ligne As String In File.ReadLines(resultats_540)
                If debut_resultats Then
                    tmp_ligne = Split(ligne, ";")
                    If tmp_ligne.Length = 34 Then
                        myConnection.Open()
                        myRequete = "insert into Infos_DRG (Civ_DRG,Nom_DRG,Prenom_DRG,Banque_DRG,Guichet_DRG,Compte_DRG,RIB_DRG,Identifiant_DRG,Compteur_DRG)"
                        myRequete = myRequete & " values ('" & tmp_ligne(24) & "','" & tmp_ligne(25) & "','" & tmp_ligne(26) & "','" _
                                                             & tmp_ligne(27) & "','" & tmp_ligne(28) & "','" & tmp_ligne(29) & "','" _
                                                             & tmp_ligne(30) & "','" & tmp_ligne(4) & tmp_ligne(12) & "','" & compteur + 1 & "')"
                        MyCommand = New SqlServerCe.SqlCeCommand(myRequete, myConnection)
                        MyCommand.ExecuteNonQuery()
                        myConnection.Close()
                        compteur = compteur + 1
                    End If
                Else
                    debut_resultats = ligne.Contains("NORME")
                End If
            Next
     
            MsgBox(compteur & " enregistrements effectués.")
     
        End Sub
     
    End Module

  9. #9
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Re,

    Je ne suis pas sur ne connaissant pas trop le Compact. Je peux émettre des suppositions.

    1) Comme je l'avais dis précédemment, tu n'indiques pas le chemin absolu. Ce n'est pas grave si ton fichier se trouve dans le même dossier que l’exécutable (je pense).
    Mais bon, au cas où, il faudrait mieux le mettre pour être sur de là où tu vas. (Il y en a peut être 2 de fichiers ?)

    2) Peut être que l'affichage de l'explorateur dysfonctionne. Essaie de faire une procédure qui fait un Select * de ta table, pour voir si il récupère quelque chose.
    Si il ne récupère rien, c'est que c'est l'explorateur le problème, sinon c'est l'insertion.

    2) Si c'est l'insertion, bien que le code semble correct, il est possible qu'il y ait une erreur. Soit pendant le code, soit à l'insertion.
    Pour vérifier, il faudrait: Mettre un point d'arrêt en début de procédure et avancer au pas à pas avec F10.


    PS : Tu perds beaucoup de temps à ouvrir et fermer la connexion a chaque requête... Mets ces instructions en dehors de la boucle sans changer le reste.

  10. #10
    Membre averti
    Homme Profil pro
    Employé
    Inscrit en
    Juillet 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 38
    Par défaut
    C'était en effet le chemin absolu de la BDD qui manquait... J'avais hésité (à tort donc) à faire directement comme tu me l'avais conseillé car ça me semble moins "portable" si je dois spécifier à l'avance le chemin de la BDD qui sera créé.

    J'ai encore de nombreuses interrogations sur l'interaction entre VB.Net et SQL Serveur Compact (comme trouver comment récupérer des données de la BDD, maintenant que je sais en insérer), mais en tout cas, pour ce qui concerne le propos de ce post, tout est résolu!

    Un grand merci!

  11. #11
    Membre Expert Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Par défaut
    Pas de quoi, n'hésite pas à mettre le sujet en "résolu".

    Si t'as des "petites questions" qui ne méritent pas l'ouverture d'un sujet, tu me m'en envoyer par message privé.

    PS: concernant le chemin...
    Il y a dans VB plusieurs commandes qui récupèrent le chemin où l'application est installée.
    Et dans ton (futur) projet d'installation, tu vas demander à ton installation de mettre ton fichier de BDD dans le dossier ou tu installes le logiciel.
    Ainsi, tu trouveras toujours le chemin absolu, même si il diffère selon les postes clients.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/11/2012, 12h05
  2. VWD 2010 Express et SQL Server Report Builder 3.0
    Par Invité dans le forum ASP.NET
    Réponses: 0
    Dernier message: 11/04/2011, 15h05
  3. Sql server express ou sql server compact
    Par vg-matrix dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 27/07/2010, 16h24
  4. integrer sql server compact v 3.1 dans VS 2010
    Par boumab dans le forum Visual Studio
    Réponses: 0
    Dernier message: 27/05/2010, 15h15
  5. création table dans VB2008 express avec sql server compact 3.5
    Par khamett dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/11/2008, 16h41

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