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 :
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 ..."
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 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 ...)
Merci aux courageux qui auront lu le message jusqu'au bout
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; }![]()
Partager