Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011
-
17 févr. 2009 à 16:22
titeoe
Messages postés433Date d'inscriptionsamedi 26 avril 2003StatutMembreDernière intervention 4 décembre 2009
-
18 févr. 2009 à 08:52
Hello les codeurs !
Voila, après quelques soucis, je reprend mon projet tranquillement et je voudrais découper ma solution en plusieurs projets logique.
1) La base de données + Classe LinqToSQL
2) La couche Metier, qui va etre tous les éléments logiques de ma classe. (qui va faire appel à la base)
3) La couche Présentation qui va etre simplement les pages qui vont faire appel aux autres couches.
J'ai commencé à monter cette architecture, et tout fonctionne à merveille. ou presque !
J'ai 2 soucis :
1) Dans mon projet Base de donnée j'ai une classe : ConnBDD qui me permet de recuperer un objet SqlConnection qui va etre utile pour la couche metier. (comme cela)
<hr size="2" width="100%" />using System.Configuration;
using System.Data.SqlClient;
namespace BDD
{
/// <summary>
/// Connexion à la base de donnée
/// </summary>
public class ConnBDD
{
/// <summary>
/// SqlConnection de la chaine de connexion à la base de donnée
/// </summary>
/// <returns></returns>
public static SqlConnection MyConn =
new SqlConnection(ConfigurationManager.ConnectionStrings["ASPNETDBConnectionString"].ConnectionString);
}
}
<hr size="2" width="100%" />Mais quand j'appel cette classe depuis ma couche metier, mon attibu MyConn est null. Vous savez pourquoi ?
2) Dans ma couche présentation j'utilise les éléments de VS2008 pour se connecter à l'application directement (asp:Login...) mais je n'ai pas mis de lien avec ma couche BDD, donc il cree à chaque run une base ASPNETDB.MDF dans la couche présentation. Moi, ce que j'aimerais c'est configurer le pointage vers la base qui se trouve dans l'autre projet.
titeoe
Messages postés433Date d'inscriptionsamedi 26 avril 2003StatutMembreDernière intervention 4 décembre 20091 18 févr. 2009 à 08:52
Bonjour,
Afin de ne pas trop te prendre la tête avec des connections à la base de données, je te conseille d'utiliser le "Data Application Block" de l'excellent Framework open source "MS Enterpise Library 4.0". Le principe est simple :
Tu déclare dans ton web.config une chaine de connection nommée vers ta base et ensuite dans ta couche de DATAS tu utilise une DataBaseFactory pour créer ta connection.
> du coup, plus de problèmes.
Ensuite pour ton point concernant l'utilisation des controles de sécurité de ASP.Net, il faut que tu mette en place un membership provider. Tu peux configurer le provider pour qu'il attaque ta base de données de ton projet. Tu trouveras un excellent article de scott mitchell sur le sujet à cette adresse :
http://aspnet.4guysfromrolla.com/articles/120705-1.aspx
Autre remarque : il n'est pas nécessaire de redonner un fichier web.config dans la couche de DATAS puisque au runtime, ta couche de datas utilisera le web.config du contexte courant, cad le fichier web.config de ta couche WEB (je pense que c'est de la que viennent tes problemes de référence nulle).
krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 17 févr. 2009 à 17:47
Salut
Pour ton 1er soucis, je te conseille plutôt de passer par une classe Singleton (enfin pas exactement singleton, mais presque), ce sera beaucoup plus pratique pour la gestion d'erreurs, des accès etc...
public class ConnBDD
{
private static SQLConnection myConn = null;
public staticSQLConnection MyConn
{
get
{ if (myConn null) myConn newSqlConnection(ConfigurationManager.ConnectionStrings["ASPNETDBConnectionString"].ConnectionString);
return myConn;
}
}
}
Comme je le disais, c'est pas tout à fait un singleton puisque myConn est de type SQLConnection et non ConnBDD, mais le principe est relativement le même.
Théoriquement, vu la façons dont j'ai nommé les propriétés / attributs, en remplaçant ton code par ça tu n'as rien à changer nulle-part.
Et grâce à ça, tu peux par exemple faire un try/catch autour de la création de ta connexion, tu peux faire des conditions, etc. (Et si tu veux transmettre des arguments, fait une fonction à la place de la propriété.
Quant à ton 2eme problème, tu peux pas simplement indiquer le chemin en absolu ? (enfin je dis ça, tu as déjà dû essayer, mais j'ai pas d'autre idée là)
Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011 17 févr. 2009 à 18:44
Merci Krimog.
Je vais effectivement faire comme ca pour la 1ere question. Cela sera plus propre dans la maniere de gérer ma connexion. (Je test ce soir et vous tien informé si ca marche pas :p)
Pour la 2eme question, c'est un peu plus complexe. Je veix bien mettre mon chemin en Absolu, mais ou ?
Donc, Comment mettre dans le 2eme Web.config (partie WEB) la liaison avec la vrai base de donnée qui est dans le projet BDD ? (Mettre une connetionString avec l'adresse en absolu ? faire reference à l'autre connetionString ?)
Bref, j'ai toujours quelques questions, mais vu ta signature, je suis sur que ca va marcher bientot :)
Djzlouk
Messages postés70Date d'inscriptionjeudi 26 juillet 2007StatutMembreDernière intervention20 janvier 2011 17 févr. 2009 à 19:13
C'est deja moi :p
Pour la 1ere question, ce n'est pas tout à fait résolu. J'ai écris ca pour que ca fonctionne (et ca marche) mais c'est pas du tout propre de l'ecrire à la main ! Parce qu'en effet, j'ai une execption : 'La référence d'objet n'est pas définie à une instance d'un objet.'
La code (qui marche mais pas propre) :
<hr />
public
static
SqlConnection MyConn{
get{
if (myConn ==
null){
try{
myConn =
new
SqlConnection(
ConfigurationManager.ConnectionStrings[
"ASPNETDBConnectionString"].ConnectionString);
}
catch (
Exception){
const
string conString =
"Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\ASPNETDB.MDF;Integrated Security=True;User Instance=True; Language=French; Pooling=true; Max Pool Size=100";
myConn =
new
SqlConnection(conString);
}
}
return myConn;
}
}
<hr />
Vous n’avez pas trouvé la réponse que vous recherchez ?
RougailSaucisse
Messages postés118Date d'inscriptionlundi 16 février 2009StatutMembreDernière intervention 6 décembre 20101 17 févr. 2009 à 20:01
es-tu certain d'avoir mis ta connection string dans la bonne section et avec le bon nom dans ton web.config?
car si tu erreur de type reference d'objet n'est pas définie a une isntance d'un objet sur ta ligne "myConn =
newSqlConnection(
ConfigurationManager.ConnectionStrings[
"ASPNETDBConnectionString"].ConnectionString);", je ne vois pas ce que ca pourrait etre d'autre.
donc vérifie que tu as bien mis ta chaine de connexion dans
<connectionStrings> avec ASPNETDBConnectionString" ..... /></connectionStrings>