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 :
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
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
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.
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)
Vous pouvez apporter vos commentaires et vos critiques si vous le souhatez, le site est là pour ça
Partager