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

ADO.NET Discussion :

modifier chemin d'accès à la base de données


Sujet :

ADO.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut modifier chemin d'accès à la base de données
    Bonjour à tous,

    je réalise une appli en c# mode WinForm avec une base de données SQLServerCompact (fichier .sdf) en ADO.NET

    Mon application doit-être portable. Mon problème est qu'actuellement elle ne l'est pas.

    En effet il y à une exception lorsque j'essaye d'accéder à la base depuis un autre PC que le mien. L'appli est incapable de retrouver le fichier .sdf

    Je ne sais pas comment et où modifier cet accès, c'est pourquoi j'ai besoin de votre aide.

    Je pensais, une fois que j'aurais trouvé comment faire, à donner un chemin d'accès se basant sur un Application.StartupPath de manière à avoir un chemin s'adaptant à toute configuration.

    Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il faut juste générer dynamiquement la chaine de connexion pour indiquer l'emplacement du fichier...

    Fais voir ton code actuel pour ouvrir la connexion à la DB

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Merci tomlev pour ta réponse rapide

    le soucis est que n'étant pas familier avec les bases de données en c# j'ai tout fait en mode drag and drop.

    Ainsi je ne suis pas sur d'avoir réellement cerné l'endroit ou s'effectue se ConnectionString.
    J'ai bien un fichier Settings.designer.cs sur lequel j'ai essayé d'agir.

    Voici le code de ce fichier:

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    //------------------------------------------------------------------------------
    // <auto-generated>
    //     Ce code a été généré par un outil.
    //     Version du runtime :4.0.30319.17929
    //
    //     Les modifications apportées à ce fichier peuvent provoquer un comportement incorrect et seront perdues si
    //     le code est régénéré.
    // </auto-generated>
    //------------------------------------------------------------------------------
     
    namespace DVD.Properties {
     
     
        [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
        [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
        internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
        {
     
            private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
     
            public static Settings Default
            {
                get
                {
                    return defaultInstance;
                }
            }
     
            [global::System.Configuration.ApplicationScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
            [global::System.Configuration.DefaultSettingValueAttribute("Data Source=|DataDirectory|\\Database1.sdf")]
            public string Database1ConnectionString
            {
                get
                {
                    return ((string)(this["Database1ConnectionString"]));
                }
            }
     
            [global::System.Configuration.ApplicationScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
            [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(LocalDB)\\v11.0;AttachDbFilename=\"c:\\users\\dileba01\\documents\\visual " +
                "studio 2012\\Projects\\Bonnet\\Bonnet\\DataBaseBonnet.mdf\";Integrated Security=True")]
            public string DataBaseBonnetConnectionString
            {
                get
                {
                    return ((string)(this["DataBaseBonnetConnectionString"]));
                }
            }
     
            [global::System.Configuration.ApplicationScopedSettingAttribute()]
            [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
            [global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
            [global::System.Configuration.DefaultSettingValueAttribute("Data Source=|DataDirectory|\\Database.sdf")]
            public string DatabaseConnectionString
            {
                get
                {
                    return ((string)(this["DatabaseConnectionString"]));
                }
            }
        }
    }
    désolé si c'est un peu long. Mon application porte le nom de DVD (d'ou le besoin de portabilité :p )
    Je ne suis pas sur que ça soit ce fichier qui est concerné.

    Selon tes suggestions j'ai essayé d'agir dessus et de mettre le code suivant à la place du chemin en dur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [global::System.Configuration.DefaultSettingValueAttribute("Data Source=(LocalDB)\\v11.0;AttachDbFilename=\""+ Application.StartupPath +
                "\\DataBaseBonnet.mdf\";Integrated Security=True")]
    L'application.StartupPath me sort le chemin de l'exécutable (le fichier .sdf étant toujours situé dans le même dossier.)

    mais ça ne plait pas au compilateur. J'ai fait quelques recherches et j'ai trouvé ça : http://stackoverflow.com/questions/6...valueattribute

    mais je ne comprends toujours pas comment faire.
    Je me suis donc dis que je pouvais modifié ce chemin que lorsque l'application est lancé (la connexion à la base de données n'est pas nécessaire sur le formulaire d'accueil) mais là encore je reste bloqué.

    Merci encore, j'ai essayé d'être le plus clair possible

    EDIT: j'ai aussi un ConnectionString dans mon DataSet, il faut peut-être que j'agisse ici.


    EDIT2 : j'ai donc essayé de changer le connection.ConnectionString dans mon dataset.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void InitConnection() {
                this._connection = new global::System.Data.SqlServerCe.SqlCeConnection();
                this._connection.ConnectionString = global::DVD.Properties.Settings.Default.DatabaseConnectionString;
    }
    j'avais ça auparavant et j'ai changé le ConnectionString par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._connection.ConnectionString = System.AppDomain.CurrentDomain.BaseDirectory + "\\Database.sdf";
    mais j'ai une exception : " Informations supplémentaires*: Le format de la chaîne d'initialisation n'est pas conforme à la spécification qui débute à l'index 0. "

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Remplace juste le répertoire par |DataDirectory| dans les paramètres. Fais cette modif en passant par les propriétés du projet,
    PAS en modifiant le fichier Settings.cs ; celui-ci est généré automatiqument, si tu le modifies manuellement tes modifications seront perdues la prochaine fois que le fichier sera regénéré.

    Soit dit en passant, ta base DataBaseBonnet est une base de données SQL Server, pas SQL Server Compact... donc absolument pas portable

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Merci encore une fois tomlev.

    Premièrement
    Remplace juste le répertoire par |DataDirectory| dans les paramètres
    Désolé mais je suis un peu perdu si tu pouvais me le détailler un peu plus s'il te plait.
    Je suis allé dans les paramètres de mon application. J'ai vu 3 paramètres :
    Database1ConnectionString
    DataBaseBonnetConnectionString
    DatabaseConnectionString

    alors que je n'ai qu'une seule base qui porte le nom de "Database.sdf"

    J'ai supprimer Database1ConnectionString et DataBaseBonnetConnectionString (qui à mon avis n'ont rien à faire dans cette appli), l'appli fonctionne toujours correctement, il me reste ce problème de chemin d'accès de la base de données.

    J'ai donc un tableau suivant:
    DatabaseConnectionString : Chaîne de connexion: Application: Data Source=|DataDirectory|\Database.sdf

    lorsque je clic sur les propriétés de connexion j'ai donc les informations suivantes:

    Source de données : Microsoft SQL Server Compact 4.0
    Poste de travail
    Propriété de connexion:
    BDD: chemin en dur je pense que c'est ce qui me gêne
    aucun mot de passe.

    Deuxièmement j'en profite pour te poser des questions sur la bdd vu que tu m'en parles:

    Soit dit en passant, ta base DataBaseBonnet est une base de données SQL Server, pas SQL Server Compact... donc absolument pas portable
    Je ne sais ce qu'est la base de données DataBaseBonnet, ma Database.sdf est pourtant bien un SQLServerCompact non? Je pourrais déployer mon appli sur n'importe quel pc?

    J'ai aussi plusieurs fichiers Northwind40.sdf dans mes documents,
    Database.sdf dans le dossier DVD et le même dans le dossier Debug.sdf

    Je suis totalement perdu, pourquoi autant de fichiers pour une base?


    Merci beaucoup.

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Stuckly Voir le message
    Désolé mais je suis un peu perdu si tu pouvais me le détailler un peu plus s'il te plait.
    Ouvre les propriétés du projet (clic droit sur le projet dans l'explorateur de solution > propriétés)
    Va dans l'onglet "Paramètres"
    Trouve le paramètre DataBaseBonnetConnectionString
    Change sa valeur pour mettre ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Data Source=(LocalDB)\\v11.0;AttachDbFilename=|DataDirectory|\DataBaseBonnet.mdf;Integrated Security=True
    (mais vu que finalement tu n'as pas besoin de cette DB, ça sert pas à grand chose en fait...)


    Citation Envoyé par Stuckly Voir le message
    Impossible de mettre mon application sur un DVD ?
    Bah c'est pas vraiment ça la question...
    SQL Server (pas compact) est une base de données serveur, donc il faut que ce soit installé sur la machine. Il ne suffit pas d'embarquer le fichier .mdf dans ton application.
    SQL Server Compact, par contre, est une base de données embarquée ; il n'y a pas besoin d'installer quoi que ce soit sur la machine, il suffit que l'application embarque le fichier .sdf de la base de données (et les DLL pour y accéder bien sûr)

    Citation Envoyé par Stuckly Voir le message
    EDIT: je viens de voir que dans les paramètres de mon appli j'ai 3 paramètres :
    Database1ConnectionString
    DataBaseBonnetConnectionString
    DatabaseConnectionString

    alors que je n'ai qu'une seule base qui porte le nom de "Database.sdf"

    J'ai supprimer Database1ConnectionString et DataBaseBonnetConnectionString, l'appli fonctionne toujours correctemment, il me reste ce problème de chemin d'accès de la base de données.
    Bah normalement le chemin est bon pour Database.sdf, puisqu'il est défini avec |DataDirectory| (à l'exécution c'est remplacé par le répertoire de l'exécutable)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Il y à du mieux.

    effectivement ta solution à fait avancer les choses. J'ai donc un DataSource de cette forme: Data Source=|DataDirectory|\Database.sdf

    Lorsque je vais dans les propriétés je constate avec bonheur que le chemin d'accès s'est adapté (je l'ai mis sur une clé et le chemin est bien celui de la clé ).

    Toutefois lorsque j'ai essayé de lancer l'appli sur un autre PC, j'ai toujours une exception et cette dernière me sort le chemin en dur précédent (celui du poste de travail c:\ ...)
    ça provient au moment de l'appel de la première datatable. Je ne sais pas pourquoi, il y à t-il des propriétés à modifier pour chaque composant ?

    Merci pour ta patiente et le temps que tu me consacres

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Stuckly Voir le message
    Toutefois lorsque j'ai essayé de lancer l'appli sur un autre PC, j'ai toujours une exception et cette dernière me sort le chemin en dur précédent (celui du poste de travail c:\ ...)
    Tu peux montrer le message d'erreur exact ?

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Impossible de charger le fichier ou l'assembly 'System.Data.SqlServerCe. Version=4.0.0.0. Culture=neutral, PublicKeyToken=89845dcd8080cc91 ou une de ses dépendances.
    Le fichier spécifié est introuvable.
    à DVD.DatabaseDataSetTableAdapters.categorie1TableAdapter.GetData(Nullable'1 parent)
    à
    DVD.FourMixtes.FourMixtes_Load(Object sender,EventArgs e) dans c:\Users\DILEBA01\Documents\Visual Studio 2010\Projects\Bonnet\DVD\FourMixtes.cs: ligne 63

    [ETC]

    ligne 63 j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable dt = categorie1TableAdapter1.GetData(categorie.getId());

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Stuckly Voir le message
    Impossible de charger le fichier ou l'assembly 'System.Data.SqlServerCe. Version=4.0.0.0. Culture=neutral, PublicKeyToken=89845dcd8080cc91 ou une de ses dépendances.
    Le fichier spécifié est introuvable.
    à DVD.DatabaseDataSetTableAdapters.categorie1TableAdapter.GetData(Nullable'1 parent)
    à
    DVD.FourMixtes.FourMixtes_Load(Object sender,EventArgs e) dans c:\Users\DILEBA01\Documents\Visual Studio 2010\Projects\Bonnet\DVD\FourMixtes.cs: ligne 63

    [ETC]

    ligne 63 j'ai ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataTable dt = categorie1TableAdapter1.GetData(categorie.getId());
    Je check sur google avec le numéro du token.

    EDIT: faudrait peut-être que j'explique un peu. FourMixte est un WindowsForm, . Au chargement de ce form j'essaye de remplir un combobox avec des données dans une base de données: je créer un datatable qui va recevoir les données à partir d"une requête prenant en argument un int .

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bah là il fait référence à un chemin local sur C:, mais c'est juste pour indiquer le fichier source où l'erreur s'est produite, ce n'est pas le chemin de la base de données...

    L'erreur se produit parce que tu n'as pas les fichiers de SQL Server Compact sur la machine où tu exécutes le programme. Il faut que tu les embarques avec l'application. Il te faut :
    - le fichier System.Data.SqlServerCe.dll
    - le répertoire x86 et son contenu
    - le répertoire amd64 et son contenu

    (normalement tout ça se trouve dans le répertoire bin\Debug ou bin\Release de ton projet)

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    J'ai rien de tout ça dans mon dossier debug ou release.

    J'ai donc copier le fichier System.Data.SqlServerCe.dll dans le premier.

    Pour amd64: j'ai rajouter un dossier qui contient:
    -msccm90.dll
    -msvcp90.dll
    -msvcr90.dll

    Mais pour le 86 je ne sais pas où trouver le bon

    Merci.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Stuckly Voir le message
    J'ai rien de tout ça dans mon dossier debug ou release.
    Ah oui, en fait ça doit dépendre de comment tu as ajouté la référence à SQL Server Compact...

    Quand on l'ajoute avec Nuget ça met bien ces fichiers. Si tu veux faire comme ça, enlève la référence à System.Data.SqlServerCe, fait "Manage Nuget Packages" sur le projet, et ajoute le package "Microsoft.SqlServer.Compact"
    (si tu n'as pas encore Nuget, tu peux l'installer depuis le gestionnaire d'extensions)

    Sinon tu peux trouver les fichiers dans "C:\Program Files (x86)\Microsoft SQL Server Compact Edition\v4.0\Private"

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Points : 31
    Points
    31
    Par défaut
    Ça fonctionne !!!!

    Un GRAND MERCI. Pour ta patiente, ta réactivité, la précision de tes réponses et ton savoir

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

Discussions similaires

  1. Accès à une base de données pour modifier son contenu
    Par nounou nu dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 13/05/2015, 00h44
  2. Réponses: 8
    Dernier message: 13/02/2014, 18h00
  3. [C#] Accés à une base de données AS400
    Par Green Hornet dans le forum Accès aux données
    Réponses: 8
    Dernier message: 14/11/2011, 11h26
  4. Modifer le chemin PATH d'accès à une base de donnée
    Par tipiweb dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/04/2005, 16h04
  5. Modifier le nom d'une base de donnée avec erreur sy
    Par mmn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2003, 10h12

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