Partage
  • Partager sur Facebook
  • Partager sur Twitter

publier programme C# avec sa base SQLite

Inclure base SQLite dans programme C#

Sujet résolu
    22 octobre 2019 à 16:48:43

    Bonjour, 
    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, je ne parviens pas à me connecter à la Base de données SQLite; 
    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.
    Voici mon code qui ne fonctionne pas après publication de l'application
     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

    -
    Edité par tidave971 22 octobre 2019 à 16:59:30

    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2019 à 13:55:29

      Le chemin en dur, c'est pas tiptop.

      SQLite est adapté à des bases de données non partagées entre les postes.

      Est-ce qu'on n'est dans ce cas de figure ?

      Le plus simple, c'est d'utiliser un chemin relatif au fichier image de votre application.

      Le Setup se chargera de mettre la base au même endroit "relativement" au répertoire d'installation choisi par l'utilisateur.

      (Le plus flexible, c'est de mettre le chemin dans le fichier de configuration et le patcher lors de l'installation pour qu'il corresponde au chemin relatif au répertoire d'installation choisi par l'utilisateur)

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        23 octobre 2019 à 18:40:31

        Salutations

        Merci pour ces conseils mais comment l'implémenter dans mon cas?

        Je ne demande pas de plat tout prêt mais comment utiliser un fichier image vers l'application ?

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          24 octobre 2019 à 13:56:00

          • Partager sur Facebook
          • Partager sur Twitter
          Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
            24 octobre 2019 à 16:05:05

            Bonjour , merci pour la réponse

            En fait mon application va fonction sur le post où elle est installée

            pas de relation avec d'autres postes

            C'est un truc simple, on a une liste de chanson par titre, on clique sur le titre et ça affiche les paroles avec la possibilité d'écouter le titre en question (instrumentaux) ; 

            mais l'utilisateur pourra ajouter ou enlever des titres etc... donc une base qui est interrogeable mais aussi modifiable.

            voici mon code simplifié:

             try
                        {
                            listBox1.Items.Add("");
            
                             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())
            
                                    {
                                        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 (IOException e)
                        {
                            MessageBox.Show("erreur de base de données");
                            if (e.Source != null)
                                Console.WriteLine("IOException source: {0}", e.Source);
                            Console.ReadLine();
                            throw;
            
                        }



            Voili mais quand je publish mon application avec la fonction "publier" de visual studio 2019, la base n'est pas accessible

            pourtant tout fonctionne bien sur l'ordi de production en débogage avec publication.

            Au lieu de se connecter à la base, j'ai l'impression que ça crée une base vide du meme nom

            Merci pour l'aide

            • Partager sur Facebook
            • Partager sur Twitter
              24 octobre 2019 à 19:14:54

              >sur l'ordi de production

              ???

              Vous voulez dire la machine de génération de la solution logicielle, ici, votre machine de développeur, pas une machine en "production" : serveur en charge de l'environnement de production (en opposition avec les machines de pre-production, de recette, d'intégration logicielle, des tests unitaires, de développement, etc...) ?

              >la fonction "publier" de visual studio 2019

              La "fonction publication" est différente en fonction du type de projet, de la cible du projet, de la version de VS voire même du type d'édition de VS.

              Dans une application Winform, ciblant .NET 3.5 Client Profile, sur le VS2017 Community Edition que j'ai sous la main, le "publication" créer une arborescence dans un répertoire correspondant à ce qui est nécessaire pour un déploiement via ClickOnce.

              Il faut donc, pour tester votre application, via son canal de publication : pour moi ClickOnce, suivre les étapes correspondant à son canal de publication.

              Pour une publication ClickOnc, cela implique monter/configurer un serveur Web mappant dans son arborescence Web : l'arborescence "fichier" créée lors du déclenchement de la "publication" dans VS. Puis utiliser un navigateur pour aller sur la page html à la racine de l'arborescence fichier via une URL correspondant à ce fichier dans le site web (pas directement dans l'explorateur de fichier) et suivre les indications affichées dans les pages Web.

              Attention aux restrictions d'accès aux systèmes de fichiers locales lié à ClickOnce qui n'est fait que pour des applications qui ne furètent pas n'importe où. C'est pour des applications téléchargées depuis le Web.

              C'est pas comme un MSI qui est "Full Power" pour installer et donne plus de libertés pour les applications installées via cette méthode.

              Donc, je sais vraiment pas ce que vous testez et comment.

              Avec des copies d'écran, ça serait vraisemblablement bien plus clair.

              Pour ce qui est de votre code :

              - Vous vous faites chier à faire tout ce bordel à la main parce que vous utilisez encore ces cochonneries de DataReader

              Avec un un DataSet/DataAdapter, c'est trois ligne.

              - Pas besoin de gérer les "Items" à la main avec DataSet/DataAdapter, vous n'avez qu'à affecter le résultat de la requête, qui est dans la DataTable du DataSet à la propriété DataSource de votre ListBox, vous configurez dans votre Designer la propriété "DisplayMember" au nom de la colonne de la DataTable contenant les valeurs à afficher dans la ListBox. Et c'est tout.

              DataReader, c'est CACA !!!

              -Ne catchez pas les exceptions à tort et à travers. Supprimez ce try/catch que je ne saurais voir, configurez votre débogueur ou votre watchDog pour avoir ces infos, sans avoir à saloper votre code.

              -Dans votre ConnectionString, vous utilisez un nom de fichier en guise de chemin, cela indique que vous allez chercher ce fichier dans le répertoire de travail courant du processus (qui peut être n'importe où, pas forcément dans le répertoire contenant le fichier image du processus). Comme je l'ai déjà indiqué, utilisez un chemin relatif au répertoire contenant le fichier image du processus. Cela permet de gérer correctement les chemins à partir des mécanismes d'installation des applications (MSI, ClickOnce, etc...).

              - Tout le code (de la ligne 3 à 24, sauf la ligne 5), c'est juste du bruit nécessaire à cette cochonnerie de DataReader.

              Voir l'exemple ici :

              https://docs.microsoft.com/fr-fr/dotnet/framework/data/adonet/populating-a-dataset-from-a-dataadapter

              (Reste plus qu'à mettre la DataTable dans le DataSource de votre ListBox)

              • Partager sur Facebook
              • Partager sur Twitter
              Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                25 octobre 2019 à 23:12:29

                Salutations

                Merci pour tes conseils; je débute donc je prends ça comme du bonus

                J'ai l'habitude de faire du PHP Mysql, je suis webmaster à la base donc j'ai des habitudes qu'il me faudra changer.

                Je passe par DataReader car je n'avais trouvé aucun moyen de mettre en forme les champs de ma base de données. Par exemple je ne pouvais pas modifier les titres avec "Replace" avant affichage. Exemple: remplacer "titre_m" par "titre", sachant que j'ai plus de 800 titres.

                Mais j'apprends donc je trouverai un moyen je pense.

                Quand je veux passer par VIsual Studio et ne pas tout faire à la main, j'ai une erreur quand je demande au datgrid ou dataview de m'afficher les donnée de la base: "Une erreur s'est produite lors de l'extraction des informations de la base de données, le type sélectionné n'est pas pris en charge par ce lecteur"

                Donc je passe par le code

                Du nouveau ......

                Tout est rentré dans l'ordre , en fait je manipulais le mauvais répertoire, j'utilisais "publish" au lieu de release

                Tout était de ma faute.... tout ça pour ça!

                Mais j'ai appris beaucoup en essayant de résoudre mon faux problème

                Pour mon problème avec ma table SQLite qui ne s’affiche pas dans mon DatagridView je vais poster un nouveau sujet.

                Merci à tous

                Blessings

                David

                Merci encore

                -
                Edité par tidave971 26 octobre 2019 à 20:17:06

                • Partager sur Facebook
                • Partager sur Twitter

                publier programme C# avec sa base SQLite

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown