WPF App, C#, SQLite: Chemin d'accès relatif pour base de données

Chris_2_4114 Messages postés 31 Statut Membre -  
 Utilisateur anonyme -
Bonjour...
J'aimerais bien que quelqu'un m'aide à créer un chemin d'accès relatif à ma base de données en WPF App.
Voici ma chaine de connexion:
SQLiteConnection con = new SQLiteConnection(@"Data Source=.\base.db");
con.Open();

Sur le PC du développement de l'appli ça marche bien mais impossible d'accéder à la base quand l'application est déployée sur un autre PC.
Merci d'avance

9 réponses

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Il se peut également que le répertoire courant de travail soit modifié par ailleurs dans ton application.
    Une option serait alors de générer le chemin absolu de la base de données, en t'aidant de
    System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)


    (cf la page suivante : https://stackoverflow.com/questions/837488/how-can-i-get-the-applications-path-in-a-net-console-application )
    1
  2. Utilisateur anonyme
     
    Bonjour

    as tu essayé de construire le chemin complet comme Reivax te l'a proposé?

    Si ça n'est pas le cas, je te propose de tester ça
                string dossier = System.AppDomain.CurrentDomain.BaseDirectory;
                string chemim = System.IO.Path.Combine(dossier, "base.db");


    C'est un peu plus rapide à l'exécution que la reflexion.
    Attention à bien mettre System.IO.Path, même si tu as un using à System.IO, car en WPF il y a un conflit avec System.Windows.Shapes.Path qui est un contrôle.

    Le message d'erreur indique "directory not found" tu peux ajouter
                if (!System.IO.Directory.Exists(dossier))
                    MessageBox.Show("Le dossier n'existe pas");


    Juste pour voir si le message s'affiche.

    Tu peux aussi ajouter
                System.IO.File.WriteAllText(System.IO.Path.Combine(dossier, "test.txt"), "Coucou");


    Pour vérifier si le fichier texte est bien écrit, ce qui éliminerait définitivement un problème de droits d'accès.

    Il y a une version trial de 30 jours du package sqlite que tu utilises.
    Pour faire un test le plus représentatif
    • avec quel Visual Studio codes tu(millésime et version {community, pro, entreprise etc....})?
    • sur quel OS?
    • quelle framework?
    • quel est l'OS du PC cible?
    • dispose t il de la framework en question?


    1
  3. Utilisateur anonyme
     
    J'ai essayé le code
    lequel je t'en ai proposé 3 en plus de celui de Xavier.

    Et je t'ai posé plusieurs questions, tu n'as répondu à aucune.
    Je ne suis pas magicien, sans éléments aucune chance de pouvoir essayer de t'aider.

    Par contre, cette fois ci ça n'est pas le même message d'erreur.
    Là clairement, il dit que le fichier n'a pas été trouvé.
    • option 1, la bdd n'est pas à cet endroit là.
    • option 2, la bdd n'est pas du tout sur le pc.

    1
    1. Chris_2_4114 Messages postés 31 Statut Membre 3
       
           string dossier = System.AppDomain.CurrentDomain.BaseDirectory;
                  string chemim = System.IO.Path.Combine(dossier, "base.db");


      Merci bien... c'est ce code que j'ai utilisé finalement. Pour l'emplacement, la bdd est bien là mais je saurai me débrouiller pour voir le souci avec le setup.
      J'utilise Visual studio Community 2019, OS: Windows 7 entreprise, .NET Framework 4.7.2. Le second PC est sous Windows 10 entreprise disposant d'une .NET Framework plus avancée (4.8)
      0
      1. Utilisateur anonyme > Chris_2_4114 Messages postés 31 Statut Membre
         
        Tu dis (et je te crois) que la bdd est bien à l'emplacement signalé par le message d'erreur.
        Pourtant ton message dit clairement le contraire.
        • Normalement W10 ne bloque pas les accès dans AppData, pour le valider de façon définitive as tu essayé d'écrire un fichier text comme je te l'ai proposé?
        • Normalement ce qui est codé en C#, avec la framework 4.7 est censé fonctionner en 4.8, mais y'a p'tet une subtilité avec ton outil. En effet, il utilise peut la dll win32 de sqlite. Il y a plusieurs façons de le faire et l'une d'entre elle est de passer par un projet C++ .Net et dans ce cas sur le PC cible il te faut le runtime qui va bien, pour 4.7 c'est le runtine 2107 (x86 ou x64 selon le cas). L'un des ces runtime est il sur ton PC de développement et absent sur l'autre?
        0
  4. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    Bonjour,

    Le fichier .db est-il bien copié avec ton application sur les autres PC ?

    Xavier
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Chris_2_4114 Messages postés 31 Statut Membre 3
     
    Oui bien sur.. Tout le projet est copié au fait
    0
  7. Utilisateur anonyme
     
    Bonjour
    Y a t il un message d’erreur sur le pc de déploiement?
    Si oui peux tu le copier coller?
    0
    1. Chris_2_4114 Messages postés 31 Statut Membre 3
       
      Je viens de déboguer l'appli, j'ai l'exception: Devart.Data.SQLiteException: "Unable to open database file"
      Impossible de trouver une partie du chemin d'accès..
      0
    2. Utilisateur anonyme > Chris_2_4114 Messages postés 31 Statut Membre
       
      Bonjour

      Je suis étonné de ta réponse, autant
      Devart.Data.SQLiteException: "Unable to open database file"
      pour quoi pas, autant
      Impossible de trouver une partie du chemin d'accès..


      Un message d'erreur est rarement écrit en français, et si c'était le cas, pourquoi une partie du texte est en anglais.

      Afin d'être bien raccord avec toi
      Impossible de trouver une partie du chemin d'accès..
      est bien écrit dans le message d'erreur? Ça n'est pas ton interprétation de
      Devart.Data.SQLiteException: "Unable to open database file"
      ?
      0
    3. Chris_2_4114 Messages postés 31 Statut Membre 3 > Utilisateur anonyme
       
      0
    4. Utilisateur anonyme > Chris_2_4114 Messages postés 31 Statut Membre
       
      OK, je suppose que la bdd est bien dans ce dossier.

      Windows mets parfois des restrictions sur des dossiers du lecteur C.
      Peux déplacer le logiciel sur un autre lecteur, ou à défaut dans "Mes Documents" pour réessayer.
      0
    5. Chris_2_4114 Messages postés 31 Statut Membre 3 > Utilisateur anonyme
       
      Merci mais c'est à l'emplacement normalement.. je l'ai déplacement sur un autre lecteur mais naz
      0
  8. Chris_2_4114 Messages postés 31 Statut Membre 3
     
    Bonjour,
    non, il n'y a aucun message erreur...
    ça répond à d'autres fonctionnalités sauf seulement s'il faut communiquer avec la base de données..
    0
  9. Chris_2_4114 Messages postés 31 Statut Membre 3
     
    Petit Rappel; voici ce que j'ai dans App.Config jusqu'ici (je me demande s'il n y a quelque chose à y ajouter par hasard):
    <configuration>
    <startup>
           <supportedRuntime version="v4.0" sku=".NETFramework, Version=v4.7.2"/></startup>
    </configuration>
    0
  10. Chris_2_4114 Messages postés 31 Statut Membre 3
     
    Bonjour,
    Merci bien.. J'ai essayé le code. Quand je lance le fichier ".exe" du dossier \bin\debug ça marche parfaitement mais quand je publie le projet et je l'installe avec l'exécutable du dossier "publish" ça ne marche pas. dans ce dernier cas le débogage donne l'exception suivante https://img-19.ccm2.net/T9mFjfO3NmEco1KdCcqa2KDL_ZA=/5e79dd82969b4fdb84defcff58073be3/tmp/c.PNG
    |fancy]
    0