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 :

Import csv - String remplacé par DbNull!


Sujet :

VB.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut Import csv - String remplacé par DbNull!
    Bonjour à toutes et à tous,

    Alors voilà, j'ai un petit problème qui commence à me faire m'arracher les cheveux! Je vous explique:

    J'ai un fichier csv contenant des commandes que je veux intégrer dans ma base sql serveur.

    Le fichier à la structure suivante:
    1;nom du client;adresse;cp;ville
    2;code article;quantité
    2;code article;quantité
    1;nom du client;adresse;cp;ville
    etc...

    La première colonne désigne si il s'agit d'une ligne entête (1) ou d'une ligne détail (2).

    Le problème est que lors de la lecture, vb ne retourne un DbNull pour le nom du client. En revanche, si je le remplace par un code article, plus de problème!

    J'en conclu donc qu'il s'agit d'un problème de structure de la colonne, mais rien de sûr, et en plus, je n'arrive pas à forcer le tout en string pour éviter le problème.

    Quelqu'un pourrait-il m'aider?

    Merci d'avance

  2. #2
    Membre chevronné Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Par défaut
    Il faudrait que tu poste ton code...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut
    En effet, cela peut aider pas mal..

    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
     
    connectionStringXLS = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                         & "Data Source='" & chemin & "';" _
                                         & "Extended Properties='text;HDR=No;FMT=Delimited';"
     
    ' Créer l'objet pour la connexion au fichier
                Dim oledbConn As OleDbConnection = New OleDbConnection(connectionStringXLS)
     
                ' Ouvrir la connexion
                oledbConn.Open()
     
                Dim dt As DataTable = oledbConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
     
                ' Sélection du data dans la Sheet1 du fichier
                Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [" & dt.Rows(0).Item("TABLE_NAME") & "]", oledbConn)
     
                ' Création du OleDbDataAdapter
                Dim oleda As OleDbDataAdapter = New OleDbDataAdapter()
                oleda.SelectCommand = cmd
     
                ' Créer le dataset qu'on va lier au datagrid plus tard
                Dim ds As DataSet = New DataSet()
     
                ' Insérer l'information du fichier dans la dataset
                oleda.Fill(ds, "XLData")
     
                ' Lier les données au datagrid
                DataTable1 = ds.Tables(0)
     
                ' Fermeture de la connexion
                oledbConn.Close()
     
                Console.WriteLine("Document excel chargé:" & fichier)
     
                ' On parcours toutes les lignes du fichier
                Do While nbLig < DataTable1.Rows.Count
                    Console.WriteLine("0: " & DataTable1.Rows(nbLig)(0))
                    Console.WriteLine("1: " & DataTable1.Rows(nbLig)(1))
                    Console.WriteLine("2: " & DataTable1.Rows(nbLig)(2))
     
                    Console.WriteLine("3: " & DataTable1.Rows(nbLig)(3))
                    Console.WriteLine("4: " & DataTable1.Rows(nbLig)(4))
              etc...
    Je vous épargne le reste où je fais des inserts dans mes différentes tables.

    Exemple de fichier csv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    1;COM0001;00001234;MAGASINS TEST;TEST PARIS;;;20121022;;TOTO JEAN PIERRE;5 RUE DU GENERAL LECLERC;BATIMENT 2;PARIS;75005;;06 07 08 09 10;00001234;00002748;TEST;
    2;COM0001;00001234;00001001; 00001;;
    2;COM0001;00001234;00001002; 00001;;
    2;COM0001;00001234;00001003; 00001;;
    2;COM0001;00001234;00001004; 00018;;
    2;COM0001;00001234;00001005; 00005;;
    2;COM0001;00001234;00001006; 00001;;
    Au niveau du code, le fichier csv se charge bien dans ma datable, le soucis, comme je l'ai dit plus haut, c'est que si il s'agit d'une ligne d’entête (commençant par 1), il me retourne DbNull au lieu de "MAGASINS TESTS", idem pour "TEST PARIS". Par contre, si je remplace ces 2 chaines par "00001001" et "00001", il me retourne les valeurs sans broncher...

  4. #4
    Membre chevronné Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Par défaut
    Pourquoi ne pas utiliser un StreamReader en lisant le fichier .csv ligne à ligne et découper les valeurs par séparateur et en fonction du numéro en première position de la ligne ?
    StreamReader
    Ces imports "automatiques" c'est toujours la galère...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 19
    Par défaut
    Oui en effet c'est toujours la galère, mais bon on n'a pas toujours le choix!

    Sinon merci pour ta solution, en effet je n'avais pas pensé au streamreader et j'étais parti tête baisser dans mon truc!

    Donc, pour ceux qui auraient le même genre de problème, voici comment le tout fonctionne:
    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
     
    ' Chargement du csv dans le reader
    Dim sr1 As StreamReader = New StreamReader(fichier)
     
    Dim ligne As String
     
    ' On parcours toutes les lignes du fichier
    Do While sr1.EndOfStream = False
       ligne = sr1.ReadLine()
       Dim tab() As String = Split(ligne, ";")
     
      If tab(0) = "1" Then
          ' Code
      End If
     
      If tab(0) = "2" Then
          ' Code
      End If
    Loop
     
    ' Fermeture du reader
    sr1.Close()
    Encore merci pour l'aide!

  6. #6
    Membre chevronné Avatar de Vince
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    369
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 369
    Par défaut
    Merci de cliquer sur le bouton résolu :

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

Discussions similaires

  1. [E-03] - Problème enregistrement csv : ";" remplacé par ","
    Par flobuzz dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/02/2009, 13h35
  2. Import d'un fichier CSV dans access par VB
    Par Shoezman13 dans le forum VBA Access
    Réponses: 3
    Dernier message: 18/06/2008, 10h43
  3. Réponses: 3
    Dernier message: 19/02/2008, 14h36
  4. Remplacer \ par \\ dans une string?
    Par g0ldenrno dans le forum Langage
    Réponses: 9
    Dernier message: 05/06/2006, 19h22
  5. Réponses: 3
    Dernier message: 07/12/2005, 13h51

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