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

Accès aux données Discussion :

[SQLCE][VS2008][DataSet]Erreur d'acces à une base de donnée "compact" (.sdf)


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Par défaut [SQLCE][VS2008][DataSet]Erreur d'acces à une base de donnée "compact" (.sdf)
    Bonjour,

    Je souhaite accéder à une base de donnée "compact" (fichier .sdf). L'application est composée de plusieurs projets :
    - IHM
    - BusinessLogic (BL)
    - BusinessObject (BO)
    - DataAccess (DA)

    La couche DataAccess contient la logique d'accès aux données (très originale ...) mais aussi le fichier de la base de données.
    La couche BO contient un DataSet typé qui fonctionne avec la BDD de la couche DA (c'est un peu limite, car le DataSet typé contient également les DataAdapter ...)
    La couche BL fournie, entre autres, une abstraction des actions disponnibles sur les données pour l'IHM.

    Arrive le premier test très simple : afficher les données d'une table dans l'IHM.
    Et là, c'est le drame ... le code généré pour le DataSet typé ne semble pas marché ...

    Mon analyse :
    Le DataSet typée définit sa chaine connexion de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private void InitConnection() {
                this._connection = new global::System.Data.SqlServerCe.SqlCeConnection();
                this._connection.ConnectionString = ("Data Source =" 
                            + (System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\DataBase.sdf;"));
            }
    Le chemin obtenu est sous forme d'url (File:\...\DataBase.sdf) et l'exception au chargement de la table est bien "le chemin ... n'est pas correct ..."

    Le code étant dans le fichier généré, il n'est pas possible de le modifier

    Je préfère me dire que j'ai raté quelque chose plutôt que de tombé dans la facilité et critique le code généré pour le DataSet typée ... Alors please, aidez moi, je ne vois pas ce que je peux changer ...

    Pour info, j'ai fait le test "tout dans un projet" et là, pas de problème ... mais le code généré est différent, c'est carrément la logique d'accès aux données qui n'est pas gérée de la même manière
    Dans ce cas, un fichier de config est créé avec la chaine de connexion dedans et le DataSet typée utilise cette chaine (donc le code n'est plus du tout le même ...)
    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::DataAccess.Properties.Settings.Default.Database1ConnectionString;
            }
    Merci aux courageux qui auront lu le message jusqu'au bout

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 104
    Par défaut
    Je reviens un peu tardivement sur ce problème.

    La source du problème en question était : le DataSet typé est généré dans un projet pour compact framework (pour la plateforme WM 5). Et c'est cela qui modifie la logique d'accès aux données (honte à moi de ne pas y avoir pensé plus tôt ...).

    Pour être plus précis, la solution contenait les projets suivants :
    - IHM (pour pocket pc)
    - IHM (winform)
    - BusinessLogic (pour pocket pc)
    - BusinessObject (pour pocket pc)
    - DataAccess (pour pocket pc)

    Le but étant d'utiliser le code à la fois pour la version mobile et la version client riche. Malheureusement, le code généré avec le DataSet typé (connexion des TableAdapter) n'est pas compatible à la fois pour une exécution en mode mobile (chaine avec Url) et pour le mode client riche (chemin classique ou utilisation de |DataDirectory|).

    Je me permets donc de poster la solution mise en place :

    1 - Pour le DataSet typé, en mode design, sélectionner tous les TableAdapter et modifier la propiété ConnectionModifier --> Public.
    2 - Dans la couche d'accès aux données, juste après la création des TableAdapter, ajouter un test pour savoir si on est en mode mobile ou pas et modifier la chaine de connexion :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                //Instanciation des TableAdapter
                //...
                //TableAdapter pour la table des utilisateurs
                DataManager.userTableAdapter = new UserTableAdapter();
                //...
                if (System.Environment.OSVersion.Platform != PlatformID.WinCE)
                {
                    //TableAdapter pour la table des utilisateurs
                    DataManager.userTableAdapter.Connection.ConnectionString = "Data Source =|DataDirectory|\\DataBase.sdf";
                    //... autres TableAdapter
                }

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

Discussions similaires

  1. TF53010 erreur d'accés à une base de données
    Par zalalus dans le forum Visual Studio Team System
    Réponses: 0
    Dernier message: 18/10/2010, 16h07
  2. Pb d'accès à une base de donnée SQLServer Compact Edition
    Par rabddoul dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/06/2009, 02h00
  3. [VS2008] Accès à une base de données Access
    Par CARNIBAL dans le forum C#
    Réponses: 2
    Dernier message: 17/03/2009, 19h16
  4. Réponses: 6
    Dernier message: 29/03/2008, 16h36
  5. [TestStand] Erreur lors d'un accès à une Base de données
    Par capblans dans le forum Autres langages
    Réponses: 1
    Dernier message: 20/07/2005, 11h29

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