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 :

Publier application C# en incluant base de données SQLite, problème de connexion [Débutant]


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut Publier application C# en incluant base de données SQLite, problème de connexion
    Bonjour à tous
    Je suis débutant en C#, j'ai l'habitude d'écrire en PHP, question syntaxe, ça se ressemble un peu... juste un peu
    Je travaille avec Visual Studio

    Mon problème est le suivant:
    J'ai fait un application pour lire des données provenant d'une base de données SQLite, c'est une sorte de recueil de chanson... tout fonctionne en local, c'est à dire sur l'ordi de production.
    Quand je publie (déploiement) mon application avec son fichier setup et que j'essaie mon application sur un autre poste, j'ai mon graphique et tout mais je ne parviens pas à me connecter à la Base de données SQLite; pourtant c’était ok en production.

    1) Comment faire pour publier mon application avec sa base de données, avec la possibilité de lire, éditer, supprimer des enregistrements?
    J'ai créé une ressource "truc" pour la base de données mais après ça bloque.

    J'avais fait un truc en VB.NET qui marchait bien, mais je n'arrive pas à faire en C#

    je faisais ça en VB.NET et ça marchait très bien:

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Dim BDDPath$ = Path.GetTempPath & "\base_exemple.db"
            File.WriteAllBytes(BDDPath, My.Resources.truc)
            Dim strConnexion As New SQLiteConnection("Data Source=" & BDDPath)
            Dim myConnexion As SQLiteConnection = New SQLiteConnection(strConnexion)
                myConnexion.Open()
                Dim sql As String = "select ref,titre from table_choses;"
                Dim cmd As New SQLiteCommand(sql, myConnexion)
                Dim myreader As SQLiteDataReader = cmd.ExecuteReader()
                While myreader.Read()
                  ********************
                End While
                myreader.Close()
                myConnexion.Close()



    Comment faire la même chose en C#
    Celà fait quelques jours que je cherche sans succès

    Voici mon code qui ne fonctionne pas après publication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                        SQLiteConnectionStringBuilder SQLCSB = new SQLiteConnectionStringBuilder();
                        SQLCSB.DataSource = @"C:\Users\Moi\source\repos\projetcsharp2\bases_de_donnees\base_exemple.db"; 
                        string ConnectionString = SQLCSB.ToString();
                        SQLiteConnection SQLC = new SQLiteConnection(ConnectionString);
                        SQLC.Open();
                        SQLiteCommand SQLCmd = SQLC.CreateCommand();
                        SQLCmd.CommandText = "SELECT ref,titre FROM table_choses";
                        SQLiteDataReader SQLDReader = SQLCmd.ExecuteReader();
     
                        while (SQLDReader.Read())
                        {
                        ******************
                        }
                        SQLC.Close();

    Merci d'avance pour votre aide

    David

  2. #2
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Citation Envoyé par tidave971 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLCSB.DataSource = @"C:\Users\Moi\source\repos\projetcsharp2\bases_de_donnees\base_exemple.db";
    J'espère que tu n'as pas réellement ce code dans ton application, sinon ça risque effectivement de poser problème quand tu vas déployer. Le chemin vers ton fichier de base de données doit être relatif à l'application, généralement le nom du fichier suffit s'il est à côté de l'exécutable. Il est possible également de le spécifier dans un fichier de configuration. Si tu as inclus dans ton projet un fichier SQLite configuré avec le schéma de la base de données tu peux mettre la propriété "Copier dans le répertoire de sortie" à "Toujours copier" afin de l'inclure dans le répertoire de publication.

  3. #3
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    salutations
    comment dois je écrire le chemin du fichier?

    j'avoue que j'ai beau chercher je ne trouve rien de probant

    - Si je mets mon fichier de base de données avec mon fichier EX, mon fichier sera visible et accessible par tous ?

    si mon code ne dois pas etre du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLCSB.DataSource = @"C:\Users\Moi\source\repos\projetcsharp2\bases_de_donnees\base_exemple.db";
    mon code dois être de quelle forme?

    je galère.... mais je suis confiant

    Merci encore

    David

  4. #4
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Bonjour,

    Les chemins absolus c'est rarement une bonne idée, il te faut utiliser un chemin relatif comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLCSB.DataSource = @"bases_de_donnees\base_exemple.db";
    Si tu ne précises pas de racine, le programme part du principe qu'il faut prendre son répertoire comme base. Du coup même si tu trimbales ton dossier un peu partout, lui saura toujours trouvé les fichiers.

    Si jamais tu veux être sur d'avoir le bon fichier, tu peux récupérer le dossier ou est lancée ton application de différentes manières, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string dossierParent = AppDomain.CurrentDomain.BaseDirectory;

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    ça fonctionnait parce que ta base était située dans Temp sur ton projet VB.
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim BDDPath$ = Path.GetTempPath & "\base_exemple.db"

    En C# c'est le même principe, tu mets ta base au même endroit et seule la syntaxe change.
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    string BDDPath = Path.GetTempPath() + @"\base_exemple.db"

  6. #6
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Bonjour à tous
    Merci encore pour votre aide

    J'ai comme conseillé,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLCSB.DataSource = @"bases_de_donnees\base_exemple.db";
    J'ai mis la base de données dans le répertoire debug,
    j'ai rajouté le fichier de la base de données au projet et j'ai choisis l'option de toujours copier dans le répertoire de sortie ...
    sans succès, l'application ne voit toujours pas la base de données

    J'ai voulu utiliser la ressource comme pour en VB mais j'ai des erreurs..



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    string BDDPath = Path.GetTempPath() + @"\base_exemple.db";
    File.WriteAllBytes(BDDPath, My.Resources.hymnes)
     string strConnexion As New SQLiteConnection("Data Source=" & BDDPath)
    J'ai essayé d’adapter mon ancien code mais toujours pas de solution

    1ere erreur : le nom de type As est introuvable (j'ai essayé aussi en minuscule)
    2eme erreur : imposible d'utiliser un membre SQLiteconnexion ne pouvant pas être appelé comme un methode

    Désolé du dérangement

    David

  7. #7
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Finalement j'utilise des using
    mais "erreur de base de données"

    [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
     
     
                         try
                {
                    using (var connection = new SQLiteConnection(@"Data Source=base_exemple.db"))
                    using (var command = connection.CreateCommand())
                    {
                        connection.Open();
                        command.CommandText = "select ref,titre from trucs";
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                // gestion de l'affichage des données
                            }
                            listBox1.Items.Add("");
                        }
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("erreur de base de données");
     
                }
    Impossible d'acceder a la base quand je fais le deploiement
    Merci

  8. #8
    Membre Expert
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 941
    Par défaut
    Petite précaution : protéger le chemin d'accès, histoire d'éviter les '/' en plus ou manquant. Remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string BDDPath = Path.GetTempPath() + @"\base_exemple.db";
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string BDDPath = Path.Combine(Path.GetTempPath(), @"\base_exemple.db");
    J'ai mis la base de données dans le répertoire debug,
    Le fichier de base de données modèle devrait être dans le dossier du projet, il sera ensuite copié dans le répertoire de sortie (Debug ou publish) au moment de la compilation ou de la publication.

    Un autre option c'est de l'ajouter en ressource incorporée ; puis à l'exécution vérifier sa présence au côté de l'exécutable et si absent faire une copie depuis les ressources incorporées. Ne connaissant pas ton appli, je ne suis pas sûr du moyen que tu pourras utiliser pour les récupérer (en WinForm on passe par un ResourceManager).

  9. #9
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Merci encore mais ça ne donne rien
    bizarre

    J'ai essayé

    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
     
     
     
     
    try
                {
                    listBox1.Items.Add("");
     
                      string BDDPath = Path.Combine(Path.GetTempPath(), @"..\..\base_exemple.db");
                    using (var connection = new SQLiteConnection("Data Source=" + BDDPath))
     
                    using (var command = connection.CreateCommand())
                    {
                        connection.Open();
                        command.CommandText = "select ref,titre from trucs";
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
     
                            {
                                var titre = reader["titre"].ToString();
                                var num = reader["ref"];
                                titre = titre.Replace(@"\n", "");
                                titre = titre.Replace(@"`", "'");
                                listBox1.Items.Add(" " + num + " - " + titre);
                            }
                            listBox1.Items.Add("");
                        }
                    }
                }
                catch (Exception)
                {
                    MessageBox.Show("erreur de base de données");
     
                }
    Maintenant quand je debug, la base est copiée dans le répertoire debug; mais maintenant meme en debug la base n'est pas reconnue

    j'ai mis des "..\.." devant la base pour indiquer la racine du dossier de l'application , le dossier principal

    L'application est simple
    j'affiche des données (des adhérents)
    avec la possibilité de supprimer et d'ajouter des fiches

    bizarre tout ça

    je commence a me demander si je n'ai pas un problème d'installation

    Merci

    David

  10. #10
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Il faut savoir, ta base est dans Temp ou bien à coté de ton appli ?

    Path.GetTempPath donne le chemin suivant :
    C:\Users\UserName\AppData\Local\Temp\


    Le répertoire de ton application est :
    System.Reflection.Assembly.GetExecutingAssembly().Location

  11. #11
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Merci
    Mais en essayant cette méthode, l'application cherche a placer la base dans un dossier .exe qui n'existe pas
    Dans mon cas, il cherche le dossier projet2.EXE; ce fichier n'est pas créé lors du deploiment

    Dans le repertoire publish, je n'ai pas de repertoire ou dossier EXE, j'ai par contre un fichier EXE du nom de mon application
    la base de données n'y est pas non plus installée

    en résumé lors du dépoiement, utilisation de la fonction publier de visual studio 2019:
    - le fichier de la base de données n'est pas copié dans le repertoire "publish"
    - je n'ai pas de reertoire .EXE dans le repertoire publish

    Merci encore

  12. #12
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Me revoilà
    Bonsoir à tous.... désolé pour le dérangement

    J'ai du nouveau, en remplaçant le catch par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     catch (IOException e)
                {
                    MessageBox.Show("erreur IO");
                catch (Exception e)
                {
                    MessageBox.Show(string.Format("Message de l'erreur : {0},\r\n source de l'erreur : {1}", e?.Source, e?.Message));
                }
    L'erreur que ça renvoie:

    System.Data.SQLite,
    Source de l'erreur: impossible de charger la DLL 'SQLite.Interrop.dll':
    Le module spécifié est introuvable.( Exception de HRESULT: 0x8007007E)
    Pourtant j'ai System.Data.SQLite d'installé par NuGet

    J'avais déja un fichier Interop.WMPLib.dll dans le dossier de l'application; J'ai téléchargé une DLL ( sqlite.interop.dll) que j'ai placé dans le dossier sans succès


    Merci de m'aider

  13. #13
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Maintenant ma base de donnée est placé automatiquement dans le répertoire de l'application
    Mais j'ai l'erreur interrop.dll
    On touche au but; presque, je le sens....

    Voici le dernier 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
     
    try
    {
                    listBox1.Items.Add("");
     
                    string BDDPath = Path.Combine(Path.GetTempPath(), @"..\..\ma_base.db");
                    File.WriteAllBytes(BDDPath, Properties.Resources.chose);
     
                    using (var connection = new SQLiteConnection("Data Source=" + BDDPath))
     
                    using (var command = connection.CreateCommand())
                    {
                        connection.Open();
                        command.CommandText = "select ref,titre from trucs";
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
     
                            {
                               // collecte des données
                            }
                            listBox1.Items.Add("");
                        }
                    }
                }
     
                catch (Exception e)
                {
                    MessageBox.Show(string.Format("Message de l'erreur : {0},\r\n source de l'erreur : {1}", e?.Source, e?.Message));
                }
    Merci de votre aide

  14. #14
    Membre habitué
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Par défaut
    Bonjour à tous!

    ça y est ... en fait c'est moi qui faisait une bêtise...
    Je me demandais bien pourquoi personne ne m'étais la main sur la solution à mon problème , en fait c'est par qu'il n y a pas de problème
    J'utilisais le mauvais répertoire.

    Si je veux utiliser un "installer" pour faire un fichier setup, il faut utiliser les éléments ( fichiers et dossiers) qui sont dans le répertoire "debug" et pas "publish".
    tout fonctionne

    ma base de données est créée avec mon setup; pas besoin de le cloner dans le fichier temps, j'utilise des chemins relatifs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using (var connection = new SQLiteConnection("Data Source=ma_base.db;Version=3;"))
    J'ai appris beaucoup en tout cas en cherchant

    Pardon du dérangement
    Merci à tous

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 30/11/2009, 16h53
  2. Réponses: 4
    Dernier message: 15/05/2009, 13h29
  3. Réponses: 2
    Dernier message: 10/09/2008, 16h04
  4. Plusieurs applications sur une même base de données
    Par ellene dans le forum Hibernate
    Réponses: 8
    Dernier message: 13/11/2007, 10h04
  5. Conseils Application serveur JAVA et base de données.
    Par Neutrino- dans le forum Persistance des données
    Réponses: 7
    Dernier message: 23/01/2007, 12h22

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