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 :roll:, 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:
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:
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 ;)