Inserer du code commun

Résolu
Troyan Messages postés 170 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 janvier 2012 - 9 févr. 2006 à 15:58
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 10 févr. 2006 à 18:46
bonjour,

dans plusieurs partie de mes pages ASP.NET
j'ai besoin d'inserer du code avant j'utiliser un include

mais aujourd'hui en vb je crois que je ne peux pas ?
si oui comment ou quelle est la bonne methode ?


******************************************
Installation Home-Cinéma de particuliers sur http://www.digital16-9.com

12 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 févr. 2006 à 18:46
Tu peux aussi faire la meme chose avec des class, tu l'instancie au début de ta page dans le pre_init par exemple, lors de l'instanciation de ta classe tu ouvre la connexion, lors du déroulement de ta page tu appeles des méthodes de la classe qui feront des trucs avec la bdd, puis dans le render de la page tu fermes ta connexion :-)

Tu peux faire ca trés rapidement avec une classe dérivée (je dérive toutes mes pages d'au moins 2 ou 3 classes perso avant de tomber sur System.Web.ui.Page)

donc si je le fais approxima ca te donne

public Class MaPage : system.web.ui.Page
{

protected myData Data;

public MaPage() : base()
{
this.preinit += new EventHandler ....
this.render etc....
this.error ...
}

private void page_preinit(blabla)
{
Data = new myData();
}

privade void page_render(blablabla)
{
Data.CloseConnection()
}

private void page_error()
{if (Data !null && Data.ConnectionState open)
Data.Closeconnection;

LogError();
}

}

puis ton objet Data sera du genre

public Class myData : IDisposable // implemente IDisposable pour fermer la connexion proprement
{

SqlConnection conn;

public MyData()
{
conn = new SqlConnection
// Ici ta le choix d'ouvrir ta connexion
// conn.open
// et de la fermer dans une méthode CloseConnection
}

public IDataReader(String SP, ...)
{
// la tu recupere ton datareader et tu le retourne
// tu ouvres ta connexion ici (ce que je préfere) si tu ne l'as pas ouvert dans le constructeur
}

~ // je me souviens plus comment on fait un destructeur :$
{
if conn.state = open
conn.close()
conn.dispose()
}

}

Ensuite dans tes pages aspx, tu ne le fais pas dérivés de System.Web.ui.Page mais de MaPage et tu auras accés à la propriété Data de partout ;)

Si tu fais comme moi, tes pages aspx sont vides :D il n'y a que des UC, il va donc fallloir aussi que tu dérives tout des UC d'une classe dérivant de UserControle de faire un shadow sur la page pour recuperer la page etc...

Je n'ai malheureusement pas trouvé d'article sur comment bien organiser un projet, et je suis encore novice la dessus (mais je bosse sur un site propre que je publierais quand j'aurais le temps ;))

donc si quelqu'un a un article la dessus :):)

PS : je sais que Azra s'ennuie la nuit et qu'en plus il cherche une idée d'article : je t'en ai trouvé un ;);)


<HR>
Cyril - MVS - MCP ASP
3
cs_Alex28 Messages postés 12 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 16 février 2006
9 févr. 2006 à 16:32
Salut Troyan!!

Essaye de mettre une balise <script runat="server"></script> dans tes pages aspx

ou insère du code vb dans la page aspx.vb associé à la page aspx.
C'est ce que l'on appelle du code behind.

Voilà, j'espère avoir répondu à ta question.

Bon courage et bonne continuation.
0
Troyan Messages postés 170 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 janvier 2012
9 févr. 2006 à 17:33
en partie mais comment dans une page vb j'insere du code vb ?


******************************************
Installation Home-Cinéma de particuliers sur http://www.digital16-9.com
0
cs_Alex28 Messages postés 12 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 16 février 2006
9 févr. 2006 à 17:48
Tu dois certainement avoir une page aspx.vb et donc tu écris ne vb dans cette page.
Sois dans le PageLoad ou dans un sub.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Troyan Messages postés 170 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 janvier 2012
10 févr. 2006 à 09:22
oui ça je vois mais justement comment dans un sub je peux appeler du code à la maniere d'un include

exemple ouverture de base

plutot que de remettre le meme code sur toute les pages j'aimerais pouvoir l'inserer dans mes sub quand j'en ai besoin !


******************************************
Installation Home-Cinéma de particuliers sur http://www.digital16-9.com
0
cs_Alex28 Messages postés 12 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 16 février 2006
10 févr. 2006 à 11:08
Tu déclare public ta méthode afin de l'utiliser dans les autres pages.

Et quand tu dois l'utiliser dans une autre page tu dois créer un objet avec le nom de ta classe où se trouve ta méthode et ensuite tu l'appelles.

Exemple:

class Test
public sub Methode_Test()
{}

Dans une autre page:

Test.Methode_Test();

Voilà !!!
0
Troyan Messages postés 170 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 janvier 2012
10 févr. 2006 à 12:10
oui mais cette methode à sa propre portée !
exemple si j'utilise dans mes methode tjrs le string SQL ou si j'ouvre ma connection elle ne sera ouverte que pour ma methode et non mon code d'appel ?.

exemple
class Test
public sub Methode_Test()
dim sql as string
blsbla open myconnection
end sub

dans mon code vb XXXXX

blabla bla...
dim glb as new global_class
glb.Methode_Test()

et bien je suppose que SQL ou ma connection ne seront pas dispo ?


******************************************
Installation Home-Cinéma de particuliers sur http://www.digital16-9.com
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 févr. 2006 à 12:17
Bonjour, les includes et autre bidouille du genre sont inutile en asp.net !!! on travail avec un langage objet il faut donc penser comme pour un langage objet :)

pour faire ce que tu veux tu fais une classe (que tu met dans le dossier App_Code en .net 2) aprés tu créer une nouvelle instance de ta classe et tu te sert de ton objet, ou alors tu fais un singleton ou autre chose du genre :)

Perso, j'ai une classe BasePage et j'hérite toutes mes pages de cette classe comme ca j'ai ce que je veux comme je veux ou je veux :)


<HR>
Cyril - MVS - MCP ASP
0
Troyan Messages postés 170 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 janvier 2012
10 févr. 2006 à 12:50
ok mais aurais tu un exemple d'heritage de cette classe et comment tu emplois cela dans tes pages
car j'ai deja fait une classe globale que j'appel pour faire des actions particulieres !
comme tu me l'avais deja conseillé d'ailleurs !

mais si je dois lancer 3 requetes je ne vais pas envoyer cela vers une procedure
qui ouvre ferme la connection 3 fois d'affilée ?

car c'est couteux en ressource !
il faudrait ouvrir
lancer les 3 requete et fermer à la fin ?


******************************************
Installation Home-Cinéma de particuliers sur http://www.digital16-9.com
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
10 févr. 2006 à 13:46
Tu as 2 solutions, soit tu ouvres ta connexion dans le init et la ferme dans le render, soit tu fermes et l'ouvre à chaque fois, j'ai choisis la 2eme solution mais je suis pas trés server side moi :p

je vais faire venir Azra, avec ses gros sabots de server-side il va t'expliquer comment qu'il fait lui :)


<HR>
Cyril - MVS - MCP ASP
0
cs_azra Messages postés 425 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 13 juillet 2007 1
10 févr. 2006 à 14:05
humph, vu que Cyril m'a reveillé.
Si c'est trois selection a la suite, au meme moment, le mieux reste d'ouvrir la connection avant et la fermer apres, sachant evidemment que si une requete plante, les suivantes planteront aussi (mais c'est la meilleure chose qui peut arriver dans une page web pour gerer les erreurs).

Apres, vu que tu parles de couteux en ressources, y'a des optimisations possibles au niveau des select "utilisation des datereaders plutot que des dataset", "systeme de cache si pas besoin de temps reel"...

Voila, je sais pas si c'était ca la question, j'ai eut la flemme de tout relire


<HR>
Azra (Florent) - MVS - MCAD.NET
0
Troyan Messages postés 170 Date d'inscription mardi 2 juillet 2002 Statut Membre Dernière intervention 21 janvier 2012
10 févr. 2006 à 17:04
Merci azra mais ce coup ci comme je suis plus tourné vers les données effectivement je le savais ;)*
ma question c'ete plutot que d'appeler une methode externe pour lancer une requete a chaque fois que j'en ai besoin dans mon code vb

je voulais faire comme feu les include à savoir inserer du code dans du code
comme ça au niveau du suivi j'ai qu'un bout de code pour mes ouverture et fermeture de base.

mais la methode externe comme me l'a decrit cyril n'est utilisable que dans la methode appellée!
hors justement je prenais le cas de plusieurs requete à lancer !
que qui aurait avec une methode externe de relancer et fermer la connection à la base autant de fois que j'aurais de requete à executer et parfois j'en ai plusieurs qui vont faire divers traitements !
(insertions, dedoublonnages, etc...)

donc la question comment avoir un bout de code reutilisable dans X page.vb ???
à la maniere de l'ancien include histoire de centraliser ce code !

cyril à parlé d'heritage de code de base dans toutes ces pages c'est peut etre ça la solution alors j'aurais bien voulu un exemple !

voila voila j'espere que ce coup ci j'ai ete plus clair parce que des fois heureusement que je sais ce que je veux dire sinon je me comprendrais pas !!


******************************************
Installation Home-Cinéma de particuliers sur http://www.digital16-9.com
0
Rejoignez-nous