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

C# Discussion :

OleDbCommand et FilePath


Sujet :

C#

  1. #1
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut OleDbCommand et FilePath
    Bonjour,

    J'ai un petit souci qui me laisse perplexe.
    J'utilise un OleDbCommand pour faire une requête SQL sur un fichier .CSV
    Une requête très simple puisque c'est un bon gros "SELECT * FROM".

    Derrière ce FROM se trouve le chemin de mon fichier.
    Cette requête fonctionne très bien si le chemin de mon fichier est un chemin accessible sans espace (enfin a priori c'est ce que je dirais, après avoir fait quelques tests différents )

    Sinon, je me tape l'exception OleDbException et qui me renvoi comme message : "Erreur de syntaxe dans la clause FROM" :s

    Voici le code :
    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
     
    private int CreateBloc(int indDebut, string Nom, string FileName)
            {
                try
                {
                    Dictionary<string, string> Dic = new Dictionary<string, string>();
     
                    String conn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\;
                    Extended Properties=""Text;HDR=No;FMT=Delimited""";
     
                    OleDbConnection cn = new OleDbConnection(conn);
                    OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM " + FileName, cn);
                    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
                    cn.Open();
     
                    DataTable dt = new DataTable();
                    da.Fill(dt);
     
                    var x = from v in dt.AsEnumerable()
                            select new
                            {
                                Col1 = v[indDebut - 1],
                                Col2 = v[indDebut]
                            };
     
                    foreach (var va in x)
                        if (va.Col1.ToString() != "")
                            Dic.Add(va.Col1.ToString(), va.Col2.ToString());
     
                    Bloc b = new Bloc(Nom, Dic);
                    _Parent.addIntoList(b);
     
                    cn.Close();
                    return 0;
                }
                catch (OleDbException ex)
                {
                    MessageBox.Show(ex.Message);
                    return -1;
                }
            }
    Donc si mon FileName est C:\blocs\test.csv -> aucun problème
    Si j'ai :
    C:\blocs tests\test.csv -> exception
    C:\blocs\bloc test.csv -> exception

    Que "l'espace" soit présent dans le nom du fichier même ou dans son Path, l'exception survient. J'ai essayé de jouer avec la class Path pour refabriquer un path correct en pensant que ca venait de là mais rien n'y fait.

    Si je mets un chemin en dur sans espace, parfait, sinon exception :s
    Quelqu'un pour m'éclairer ?
    Merci

  2. #2
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    si :
    C:\blocs tests\test.csv -> exception
    C:\blocs\bloc test.csv -> exception
    alors :
    "C:\blocs tests\test.csv" ->pas exception à mon avis
    "C:\blocs\bloc test.csv" ->pas exception à mon avis

    à toi de tester...

  3. #3
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Test effectué et ... échec

    Le message d'exception suivant survient :

    Le moteur de base de données ne peut pas trouver "C:\Blocs test\test.csv". Assurez-vous que le nom de paramètre ou d'alias est valide, qu'il ne comprend pas de caractère de ponctuation incorrect et qu'il n'est pas trop long.
    Il a pas trop l'air d'aimer les " " autour

  4. #4
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Même comme ça ?
    C:\"blocs tests"\test.csv
    C:\blocs\"bloc test.csv"

    si ça ne fonctionne toujours pas et ben ne mets pas d'espace dans tes chemins d'accès sinon recherches encore...

  5. #5
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    Même comme ça ?
    C:\"blocs tests"\test.csv
    C:\blocs\"bloc test.csv"
    je reviens au message d'erreur initial : "Erreur de syntaxe dans la clause FROM". Mais merci de m'aider à trouver une solution

    si ça ne fonctionne toujours pas et ben ne mets pas d'espace dans tes chemins d'accès ...
    Le problème c'est que le FileName est renvoyé par un openFileDialog et que le projet est destiné a une entreprise, je vais pas les forcer a stocker leur CSV dans un chemin contenant aucun espace

    ...sinon recherches encore...
    Je cherche, je cherche, depuis quelques jours déjà. Le message d'erreur est pas très explicite et je trouve pas de cas similaire au mien.

  6. #6
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    juste une question :
    Quel est le vrai chemin de tes .csv sur ton poste ?
    je pense comprendre...

  7. #7
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    juste une question :
    Quel est le vrai chemin de tes .csv sur ton poste ?
    je pense comprendre...
    Heu un truc similaire à ce que je donnais en exemple, à savoir :

    C:\Blocs FABRICOM GTI
    Mais si je mets autre chose , même
    C:\Blocs test
    Ça revient au même

    Et dedans j'ai deux fichiers .CSV mais qui ne s'appellent pas test.csv évidemment

  8. #8
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    Dans ta chaine de connexion tu dois lui mettre le répertoire dans lequel se trouve ton fichier...
    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String conn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Text;HDR=No;FMT=Delimited""",Path.GetDirectoryName(FileName));
    et dans ton select tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    OleDbCommand cmd = new OleDbCommand(@"SELECT * FROM " + Path.GetFileName(FileName), cn);
    je penses que ça fonctionnera mieux...

  9. #9
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut

    J'avais essayé de jouer avec Path et le DataSource de la connectionString mais sans succès.

    Ta méthode fonctionne très bien, merci beaucoup

  10. #10
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    C'est moi qui re-vient a la charge
    Je viens de m'apercevoir que le problème n'est pas tout a fait résolu.

    En fait maintenant ça fonctionne bien si j'ai un chemin de type
    C:\Bloc Test\Bloc.csv
    C:\BlocTest\Bloc.csv
    Mais j'ai de nouveau le message d'exception si mon chemin ressemble à :
    C:\Bloc Test\Bloc 1.csv
    Donc si il y a un espace dans le nom de fichier proprement dit, sans son directory, l'exception ressurgit

    Je vois pas avec quelle méthode de Path "jouer" pour mon FileName et résoudre ce problème.

  11. #11
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    envoie moi les chaines de connexions qui buggent, le nom du fichier généré et le message de l'exception pour avoir plus de précisions...

  12. #12
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    envoie moi les chaines de connexions qui buggent,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String conn = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Text;HDR=No;FMT=Delimited""", Path.GetDirectoryName(FileName));
    le nom du fichier généré
    Fichier généré ? gni ?
    et le message de l'exception pour avoir plus de précisions...
    "Erreur de syntaxe dans la clause FROM"
    Peu importe le directory, qu'il y aie des espaces ou non, l'erreur donné plus haut survient si le nom du fichier en lui même contient des espaces.

    C:\...on s en fout..\Bloc.csv -> fonctionne
    C:\...on s en fout..\Bloc Test.csv -> fonctionne pas

  13. #13
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string.Format("SELECT * FROM \"{0}\"" ,Path.GetFileName(FileName));

  14. #14
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par sisqo60 Voir le message
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string.Format("SELECT * FROM \"{0}\"" ,Path.GetFileName(FileName));
    J'y avais +/- pensé et essayé mais a ce moment la , on dirait qu'il ne tient plus compte du directory spécifié dans la chaine de connexion et renvoi une exception comme quoi il n'a pas pu trouver "Bloc test.csv" et qu'il faut s'assurer que le chemin est bon.

    Je comprends pas pourquoi il fait "abstraction" du directory

  15. #15
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    donne moi la valeur de ta connexion string quant tu executes.
    et la valeur de ta requete sql

  16. #16
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Voila, avec un point d'arrêt les valeurs :

    On voit que le FileName semble bon (mais ca ne fonctionne pas si on le précise directement derrière le FROM) , que la chaine de connexion a bien le bon directory en DataSource et que derrière le FROM on trouve bien le nom du fichier entouré de " ".
    Images attachées Images attachées  

  17. #17
    Membre Expert Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Par défaut
    c'est extrêmement bizarre mais à vrai dire j'ai plus du tout d'idées...

    désolé

  18. #18
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Oui j'ai bon remué le truc dans tous les sens, y a chaque fois un cas qui n'est pas géré et qui renvoi une exception

    Merci quand même pour ton aide.
    Peut-être quelqu'un qui passera par la aura une idée

  19. #19
    Membre expérimenté
    Avatar de Lyche
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2007
    Messages
    2 523
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 523
    Billets dans le blog
    4
    Par défaut
    Il faudrait pas le path du fichier dans la requète? Parce que sur ton screen, je ne vois que le nom du fichier, mais pas l'adressage où le trouver.
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Mon Tutoriel pour apprendre les Agregations
    Consultez mon Blog SQL destiné aux débutants

    Pensez à FAQ SQL Server Ainsi qu'aux Cours et Tuto SQL Server

  20. #20
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par Lyche Voir le message
    Il faudrait pas le path du fichier dans la requète? Parce que sur ton screen, je ne vois que le nom du fichier, mais pas l'adressage où le trouver.
    Le path est précisé dans la connectionString au niveau du DataSource.
    Alors je dois pas le re-préciser dans la requête, si ?

    je ne pense pas vu que ce code fonctionne très bien si mon nom de fichier ne contient pas d'espace et évidemment que j'enlève les " " autour du nom de fichier.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. source d'un OleDbCommand dans un autre OleDbCommand
    Par mapmip dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/08/2008, 14h30
  2. Réponses: 1
    Dernier message: 21/02/2007, 10h57
  3. [C#]Problème OleDbCommand.ExecuteReader avec BdD Access
    Par Renesis57 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 24/09/2006, 18h36
  4. [VC++.Net2003] OleDbCommand et adrip
    Par aziziti dans le forum MFC
    Réponses: 4
    Dernier message: 24/05/2006, 15h14
  5. [C#] DataSet et OleDbCommand
    Par telynor dans le forum Windows Forms
    Réponses: 5
    Dernier message: 06/01/2005, 14h25

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