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 :

Classe pour manipuler les données issues d'une base de données.


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut Classe pour manipuler les données issues d'une base de données.
    Bonsoir à tous,
    Je suis tellement satisfait de ma petite classe que j'ai décider de la publier et puis je vous est tellement ennuyé avec mes questions que c'est un juste rendu
    C'est une classe qui n'a pas l'air comme ça mais qui rend un énorme service si vous avez besoin de manipuler des données issues d'une base de données.

    Les Données peuvent être stockés dans un variable en 3 Versions :
    - Original : Variable Nullable (Valeur original issue de la base, peut etre = Nothing)
    - Current : Variable typé Non Nullable (Variable courante de travaille)
    - Défaut : Variable typé Non Nullable (Valeur par Défaut optionnel si la base retourne DBNull).

    Voici les principales caractéristiques et les fonctionnalités que je me suis imposées :
    1- Permet de lire, stocker les valeurs DBNull pour éventuellement pouvoir les restituer ensuite dans la base. (Je commence par ce point qui me parait essentiel). Certains se demanderont pourquoi lire ou restituer une valeur DBNull, pour moi un bon code doit être prêt à toutes éventualités et écrire une valeur DBNull n'a rien de choquant et peut même être considéré comme n'importe quelle donnée, à fortiori si le code est prêt pour cela.
    2- Le stockage d'une valeur DBNull dans une variable Nullable (qui prend dans ce cas la valeur Nothing) peut mettre la pagaille dans le code car cela oblige à tester fréquemment cette valeur pour savoir si elle est : (Is Nothing) ou (Is Not Nothing). En effet, sans ce test, les opérateurs "=" ou "<>" ne retournent pas les résultats attendues dés lors que l'on travaille avec des valeurs Nothing. La version Original (volontairement Nullable) est prévue pour stocker ce type de valeur mais elle n'est pas prévue pour travailler avec. Pour travailler et pouvoir utiliser les opérateurs correctement il faut utiliser la Version Current.
    3- La classe permet de définir un valeur par défaut dans le cas ou la base retournerait une valeur DBNull (dans ce cas c'est cette valeur qui est utilisée dans la version Current)
    4- Si vous me suivez toujours , la version Current ne peut pas être Nullable. Comment faire dans ce cas si on a besoin d'écrire une valeur DBNull dans la base sans déclarer une variable supplémentaire ? La Méthode SetRequestToDBNull est prévue pour cela.
    5- Comment faire si à la place d'écrire une valeur DBNull on veut écrire la valeur par Défaut ? On utilise utilise l'argument WriteDefaut de la méthode Write value.
    6- Ecrit dans la base uniquement si la valeur à écrire est différente de celle de la base. (Permet de ne pas modifier inutilement le Statut HasChanges du Dataset).

    La code de la classe clsVarTypeDB :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Class clsVarTypeDB(Of T)
        Private O_Original As Object
        Private T_Defaut As T
        Private T_Current As T
        Private bol_RequestToDBNull As Boolean
        Public Sub New(ByVal Value As Object, Optional ByVal Defaut As T = Nothing)
            SetVersioningValues(Value, Defaut)
        End Sub
        Public ReadOnly Property Original() As Object
            Get
                Return O_Original
            End Get
        End Property
        Public ReadOnly Property Defaut() As T
            Get
                Return T_Defaut
            End Get
        End Property
        Public Property Current() As T
            Get
                Return T_Current
            End Get
            Set(value As T)
                T_Current = value
            End Set
        End Property
        Public ReadOnly Property IsRequestToDBNull() As Boolean
            Get
                Return bol_RequestToDBNull
            End Get
            'Set(value As Boolean)
            '    _SetNothing = value
            'End Set
        End Property
        Public Sub SetRequestToDBNull()
            bol_RequestToDBNull = True
        End Sub
        Public Sub ResetRequestToDBNull()
            bol_RequestToDBNull = False
        End Sub
        Public Sub SetVersioningValues(ByVal Value As Object, ByVal Defaut As T)
            T_Defaut = Defaut
            If Value Is DBNull.Value Then
                O_Original = Nothing
                T_Current = Defaut
            Else
                O_Original = Value
                T_Current = Value
            End If
        End Sub
        Public Sub WriteValue(ByVal Row As DataRow, ByVal ColName As String, Optional ByVal WriteDefaut As Boolean = False)
            Dim _Value As T
            If bol_RequestToDBNull = True Then
                If WriteDefaut = True Then
                    _Value = T_Defaut
                Else
                    Row(ColName) = DBNull.Value
                    Exit Sub
                End If
            Else
                _Value = Current
            End If
     
            If O_Original Is Nothing Then
                Row(ColName) = _Value
            Else
                If O_Original <> _Value Then Row(ColName) = _Value
            End If
        End Sub
    End Class
    Pour l'utiliser (PS : Il faut disposer d'une Datarow que j'appelle : row) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ' Déclaration de la variable :
    Dim MyVar1 As New clsVarTypeDB(Of Single)(Row(Colonne1),0.15)
    ' On peux manipuler MyVar1.Current
    MyVar1.Current = 0.33
    ' On écrit la version current dans la base : 
    MyVar1.WriteValue(Row, Colonne1)
     
    ' Pour ecrire une valeur DBNull :
    MyVar1.SetRequestToDBNull()
    MyVar1.WriteValue(Row, Colonne1)
     
    ' Pour écrire la valeur par défaut
    MyVar1.SetRequestToDBNull()
    MyVar1.WriteValue(Row, Colonne1, True)
    Il y a surement d'autre façon de faire ou des améliorations à apporter mais cette classe me satisfait pleinement, j'espère qu'elle pourra vous rendre service également.
    Vous pouvez apporter vos commentaires et vos critiques si vous le souhatez, le site est là pour ça

  2. #2
    Membre éclairé Avatar de -N4w4k-
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2011
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Novembre 2011
    Messages : 545
    Points : 801
    Points
    801
    Par défaut
    Salut BasicZX81,

    Je n'ai pas trop eut l'occasion d'utiliser de base de données dans mes projets pour l'instant, ni dans un futur proche alors je ne m'en servirais pas..

    Quoiqu'il en soit, c'est top que tu es pris la peine de créer tes propres "outils", ça permet de pratiquer et de se lancer de nouveaux défis. C'est comme ça que l'on apprend J'essaie tout comme toi de réfléchir aux différents problèmes que je rencontre et de trouver des solutions, toutes faites ou non, qui s'adaptent le mieux possible à ce que je veux.

    Bon boulot

    ++
    J’ai des questions à toutes vos réponses!

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Merci N4w4K,
    J'ai decouvert les classes trés recement, c'est clair que ca permet de construire des outils trés puissant et qui, si elle s'ont bien construites finissent par se faire oublier dans le projet.
    Quand aux bases de données c'est un gros morceau à apprendre et j'ai galéré un moment pour pouvoir comprendre tous les mécanismes ADO.NET mais je commence à m'en sortir pas trop mal....

    Bon code.

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    le but de ton code est de remplacé une ligne de code par 5 ou j'ai raté un truc ?

    sinon tu peux regarder Entity Framework et les méthodes d'extensions
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Bonsoir Pol63, c'est possible que j'ai raté un truc, je ne connais pas tout...

    Je regarderais Entity Framework et les méthodes d'extensions à l'occasion mais c'est quoi exactement ? Pourvu que ma classe fasse plus de choses sinon j'aurais fait ça pour rien.....
    Non mais ça va, je suis pas inquiet, j'en suis très content de ma petite classe.

Discussions similaires

  1. [PHP 5.3] Affichage de données issues d'une base de données
    Par mevane dans le forum Langage
    Réponses: 3
    Dernier message: 08/11/2013, 18h39
  2. Réponses: 2
    Dernier message: 11/03/2013, 18h24
  3. Réponses: 4
    Dernier message: 04/05/2010, 15h55
  4. Réponses: 1
    Dernier message: 29/01/2010, 16h17
  5. [Dojo] Affichage de données issues d'une base de donnée
    Par Lnhab dans le forum Bibliothèques & Frameworks
    Réponses: 8
    Dernier message: 09/10/2009, 23h53

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