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

VB.NET Discussion :

Connexion base de données avec singleton


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut Connexion base de données avec singleton
    Bonjour à tous,

    Je voudrais faire en sorte que mon application n'exécute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    New SqlConnection(connectString)
    qu'une seule fois.

    De ce fait, j'ai crée une classe LinkDataBase pour avoir qu'une seule connexion au serveur (singleton) :

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Public Class LinkDataBase
     
        Private connectString As String = "..."
        Private Shared instance As LinkDataBase = Nothing
     
        Private Sub New()
     
            Dim connection As SqlConnection = New SqlConnection(connectString)
     
            connection.Open()
     
            If Not connection.State = ConnectionState.Open Then
                MsgBox("Server connection failure ", MsgBoxStyle.OkOnly, "Status")
            End If
     
        End Sub
     
     
        Public Shared Function GetInstance() As LinkDataBase
     
            If instance Is Nothing Then
                instance = New LinkDataBase()
            End If
     
            Return instance
     
        End Function
    End Class
    De ce côté la, pas de problème. Cependant, quand je veux faire une SqlCommand, le second paramètre doit être de type SqlConnection sauf que quand je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim insert As SqlCommand = New SqlCommand("INSERT INTO ..", LinkDataBase.GetInstance())
    il me dit qu'une valeur type LinkDataBase ne peut être convertie en SqlConnection (logique).

    Quelqu’un pourrait me dire comment palier ce problème ?

    Merci,

    Jah

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonjour,

    Votre méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LinkDataBase.GetInstance()
    renvoie un objet LinkDataBase et pas une SqlConnection.

    Vous pouvez peut être ajouter une propriété à votre classe de type SqlConnection afin de pouvoir l'utiliser par la suite.

    Mais pourquoi vouloir monopoliser une connection à une source de données sur la durée de vie de l'application?

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Bonjour Rainui,

    En fait, j'ai énormément de requêtes à faire dans différentes classes et je voulais mettre le getInstance dans chaque SqlCommand pour centraliser et simplifier la chose.

    Il faudrait donc que j'intègre un return quelque part ?

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonjour,

    Vous pouvez plus simplement écrire une fonction à laquelle vous passez comme paramètre la requête que vous voulez exécuter et qui renvoie les résultats sous la forme que vous souhaitez utiliser.

    Ainsi vous n'aurez plus qu'à utiliser cette fonction pour récupérer vos données partout ou vous en avez besoin.

    Fonction du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Public Function ReturnData(ByVal CmdString As String) As DataTable
        Dim _Result As New DataTable
        Dim _ConnString As String = "Data Source=|DataDirectory|\MyDB.sdf;Persist Security Info=False;"
        Dim _Conn As New SqlServerCe.SqlCeConnection(_ConnString)
        Dim _Command As New SqlServerCe.SqlCeDataAdapter(CmdString, _Conn)
        _Conn.Open()
        _Command.Fill(_Result)
        _Conn.Close()
        Return _Result
    End Function

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Merci pour vos réponses Rainui,

    Le problème c'est que ce sont des inserts, dans les classes où j'exécute les requêtes, je voudrais éviter d'avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim _ConnString As String = "Data Source=|DataDirectory|\MyDB.sdf;Persist Security Info=False;"
        Dim _Conn As New SqlServerCe.SqlCeConnection(_ConnString)
    De ce fait, j'ai voulu faire un singleton pour avoir à écrire ces lignes qu'une seule fois. De plus, je n'ai pas besoin de retour comme ce sont des Insert : ExecuteNonQuery()


    EDIT : Cette solution peut convenir mais je voudrais éviter de faire _Conn.Open() et _Conn.Close() à chaque requêtes

  6. #6
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2012
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 337
    Par défaut
    Bonjour,

    Heu, l'idée reste la même, je ne vois pas ce qui vous dérange

    Au lieu de faire une fonction vous faites une Sub, à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim _Command As New SqlServerCe.SqlCeDataAdapter(CmdString, _Conn)
    vous mettez un SqlServerCE.SqlCommand() puis à la place de vous mettez _Command.ExecuteNonQuery()

    Je ne vais pas vous pondre le code exact, je ne sais pas ce que vous voulez faire

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

Discussions similaires

  1. Connexion base de donnée avec un code C#
    Par yochima dans le forum C#
    Réponses: 12
    Dernier message: 20/05/2017, 19h12
  2. [Débutant] Connexion base de donnée avec silverlight
    Par jorrie dans le forum Silverlight
    Réponses: 7
    Dernier message: 05/11/2012, 09h49
  3. Réponses: 2
    Dernier message: 24/03/2010, 11h37
  4. connexion base de données avec wxwidgets
    Par Zavonen dans le forum wxWidgets
    Réponses: 7
    Dernier message: 17/09/2007, 07h15
  5. creer connexion base de donné avec dbedit eclipse
    Par youcef81 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 22/07/2006, 17h37

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