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

ASP.NET Discussion :

Mettre un lien relatif pour mon provider


Sujet :

ASP.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Mettre un lien relatif pour mon provider
    Bonjour,
    Je suis actuellement entrain de développer un site intranet pour mon stage et je voudrai trouver un moyen de mettre le provider de la BDD access en relatif ce qui m'éviterai de devoir le changer à chaque fois que je change de PC.
    J'ai donc une arborescence de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Racine /
      -- /App_Code / (contenant des objets)
             -- SI.vb
             -- Email.vb
             -- ...
      -- /App_Data / 
             -- IncidentENSAM.mdb
      Default.aspx
      ...
    Donc, actuellement, mon provider est déclaré dans ma classe dont une instanciation de cette classe est transmise de page en page grâce à l'objet Application.
    Pour le moment, le provider est déclaré de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private s_Provider As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:/STAGE/Site/App_Data/IncidentENSAM.mdb"""
    Private o_CNX As OleDbConnection = Nothing
    La connexion à la BDD est déclarée dans le constructeur de la classe SI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub New()
            ' On créé une nouvelle connexion à la base de données
            o_CNX = New OleDbConnection(s_Provider)
            ' .....
    End Sub
    Et je le récupère grâce à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public ReadOnly Property Connexion() As OleDbConnection
            Get
                Return o_CNX
            End Get
    End Property
    Comment puis-je donc faire en sorte que le provider pointe directement sur /App_Data/IncidentENSAM.mdb sans mettre la lettre du lecteur où elle est enregistrée et les dossiers qui précèdent la racine du site intranet ?

    Merci d'avance à ceux qui pourront m'aider.

  2. #2
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Salut,

    1/ mets ta chaine de connexion dans le web.config.
    2/ la méthode que tu utilise est un peu dangereuse. Une connection est un objet qu'il ne faut pas conserver trop longtemps, mais renvoyer dans le pool le plus vite possible
    3/ pour le fond de ta question, change ta chaine de connexion de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""F:/STAGE/Site/App_Data/IncidentENSAM.mdb"""
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\IncidentENSAM.mdb
    ...ca devrait le faire

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tout à bord, merci pour ta réponse.
    J'ai modifié le provider comme tu me l'a indiqué et cela fonctionne parfaitement.
    Par contre, je n'ai pas trop saisis tes deux premiers points :
    Citation Envoyé par Philippe Vialatte
    1/ mets ta chaine de connexion dans le web.config.
    Je n'ai jamais touché au web.config mis à part pour le debug=true donc je ne sais pas trop comment m'y prendre
    Citation Envoyé par Philippe Vialatte
    2/ la méthode que tu utilise est un peu dangereuse. Une connexion est un objet qu'il ne faut pas conserver trop longtemps, mais renvoyer dans le pool le plus vite possible
    Qu'entends-tu par pool ?

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Pour la chaine de connexion dans le web.config, regarde ici :
    http://msdn.microsoft.com/fr-fr/libr...8VS.80%29.aspx

    Le but est de conserver ta chaine de connexion dans un fichier de configuration externe a ton code, comme cela, si tu as besoin de changer ta chaine de connexion (changement d'emplacement, mise en production...), tu n'as pas besoin de recompiler

    Pour le pool de connexion, une petite citation :
    Un pool de connexions est un mécanisme permettant de réutiliser les connexions créées. En effet, la création systématique de nouvelles instances de Connection peut parfois devenir très lourd en consommation de ressources. Pour éviter celà, un pool de connexions ne ferme pas les connexions lors de l'appel à la méthode close(). Au lieu de fermer directement la connexion, celle-ci est "retournée" au pool et peut être utilisée ultérieurement.
    Ta base de données ne peut maintenir qu'un ensemble fini de connections ouvertes, le but est donc de "rendre" tes connections le plus vite possible...

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ok pour le web.config.

    Pour le pool, j'ai compris mais est-ce que mon code actuel me permet de faire qu'une seule connexion ? Explication :
    Donc, j'ai une classe SI qui dispose d'un oledbConnexion : o_CNX
    Dans le constructeur de cette classe, j'instancie o_CNX :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    o_CNX = New OleDbConnection(s_Provider)
    où s_Provider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private s_Provider As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\IncidentENSAM.mdb"
    Donc à la suite de cette instanciation, j'exécute quelques requêtes pour récupérer des valeurs qui vont être utilisées dans la création de certains objets.

    Pour le moment, je comprends pourquoi tu me parles de pool. Tu dois sans doute penser que j'instancie un objet SI pour chaque page ce qui n'est pas le cas. En fait, lorsqu'un visiteur arrive sur le site, dans le MasterPage, je fais ceci :
    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
    Private o_SI As SI
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Dim s_page() As String = Split(Request.FilePath, "/")
            If Session("Utilisateur") = Nothing Or Session("Machine") = Nothing Then
                Dim s_User() As String = Split(HttpContext.Current.User.Identity.Name(), "\")
                ' On récupère le nom de la machine sur laquelle l'utilisateur est connecté
                ' On récupère l'adresse IP de la machine puis on récupère le nom DNS associé à cette IP
                Dim s_Ordinateur() As String = Split(System.Net.Dns.GetHostEntry(Request.ServerVariables.Item("REMOTE_HOST")).HostName, ".")
                ' on créé une session récupérant le login et la machine utilisée par l'utilisateur connecté
                Session.Timeout = 90
                Session("Utilisateur") = s_User(1)
                Session("Machine") = s_Ordinateur(0)
                Session("Administrateur") = 0
                Application("SI") = New SI()
     
                Application("IdDemandeFini") = 4
            End If
            o_SI = Application("SI")
        End Sub
    Donc quand un utilisateur arrive, on lui créé une session et on instancie en même temps un objet SI donc on créé une connexion. Puis, lorsqu'il va naviguer, la session sera déjà existante donc on récupère l'objet déjà instancié.

    Je ne sais pas si je suis clair.

    Si ce n'est pas bon, comment puis-je faire pour mettre en place le système de pool. J'avoue avoir la flemme de chercher entre l'application, le rapport de stage, les bugs, ...

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par Age1s Voir le message
    Pour le moment, je comprends pourquoi tu me parles de pool. Tu dois sans doute penser que j'instancie un objet SI pour chaque page ce qui n'est pas le cas. En fait, lorsqu'un visiteur arrive sur le site, dans le MasterPage, je fais ceci :

    Donc quand un utilisateur arrive, on lui créé une session et on instancie en même temps un objet SI donc on créé une connexion. Puis, lorsqu'il va naviguer, la session sera déjà existante donc on récupère l'objet déjà instancié.
    Ce qui est exactement le pb...

    Une connexion doit être ouverte le plus tard possible, et fermée le plus tôt possible, sinon, tu ne pourra plus en ouvrir à un moment ou un autre de la vie de ton appli.

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ok ba je vais modifier ça tout de suite.

    Maintenant que j'y pense, je le fais également en PHP donc je ne vois pas pourquoi je ne le ferai pas en ASP

    Encore merci et bonne fin de journée.

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

Discussions similaires

  1. comment aspirer les liens "embed" pour les utiliser sur mon site
    Par stephanech dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 03/08/2010, 09h56
  2. Mettre un lien dans mon header
    Par yapaf_oto dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 06/01/2010, 13h59
  3. Lien relatif pour arborescence dossier web
    Par thewind1 dans le forum E-Commerce
    Réponses: 2
    Dernier message: 05/09/2007, 00h39

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