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

Fermé
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 - 25 nov. 2020 à 09:39
 Utilisateur anonyme - 30 nov. 2020 à 17:04
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
A voir également:

9 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 nov. 2020 à 09:50
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
Utilisateur anonyme
29 nov. 2020 à 10:16
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
Utilisateur anonyme
30 nov. 2020 à 12:36
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
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3
30 nov. 2020 à 15:48
     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
Utilisateur anonyme > Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022
30 nov. 2020 à 17:04
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
Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
25 nov. 2020 à 09:53
Bonjour,

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

Xavier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3
25 nov. 2020 à 09:54
Oui bien sur.. Tout le projet est copié au fait
0
Utilisateur anonyme
26 nov. 2020 à 08:07
Bonjour
Y a t il un message d’erreur sur le pc de déploiement?
Si oui peux tu le copier coller?
0
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3
26 nov. 2020 à 11:18
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
Utilisateur anonyme > Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022
26 nov. 2020 à 17:48
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
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3 > Utilisateur anonyme
26 nov. 2020 à 17:53
0
Utilisateur anonyme > Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022
26 nov. 2020 à 18:23
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
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3 > Utilisateur anonyme
26 nov. 2020 à 18:42
Merci mais c'est à l'emplacement normalement.. je l'ai déplacement sur un autre lecteur mais naz
0
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3
26 nov. 2020 à 09:06
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
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3
26 nov. 2020 à 11:24
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
Chris_2_4114 Messages postés 29 Date d'inscription mercredi 9 octobre 2019 Statut Membre Dernière intervention 27 mai 2022 3
30 nov. 2020 à 10:47
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