Bonjour à tous,
J'ai un petit programme en VB.NET, dans lequel j'utilise ADO.NET, qui remplit un serveur sous MS SQL 2008.
Je relève des données, de type Double par exemple, depuis un fichier que j'assigne à des variables 'maVariable = donneeRelevee' avec un Parse 'Double.Parse(maChaine)'.
Suite à ça, j'envoie maVariable à la classe qui s'occupe des requêtes et stocke la donnée. Jusque là pas de problème.
Là où ça coince, c'est quand la donnée relevée est absente, je dois la mettre NULLABLE au niveau de la BDD. Sauf que si elle est absente, le Parse ne fonctionne pas, je dois donc faire la procédure suivante :
Jusque là ça va, j'envoie mes valeurs à la procédure qui utilise ADO.NET
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Public Sub Ajoute(ByRef dictionary As Dictionary(Of Integer, Double), ByVal countDictionary As Integer, ByVal str As String, ByVal ciClone As System.Globalization.CultureInfo) Dim nb As Double = Nothing If Double.TryParse(str.Replace(" ", ""), NumberStyles.Any, ciClone, nb) Then dictionary.Add(countDictionary, nb) Else dictionary.Add(countDictionary, nb) End If End Sub
Dans la configuration précédente, j'ai un "0" stocké dans la BDD à la place d'un "NULL". Comment je peux faire pour insérer un 'DBNull.Value' ?
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 Public Sub maProcedure(donneeRelevee1, donneeRelevee2, ..) Dim counterKvp As Integer = 0 For Each kvp As KeyValuePair(...) In uneVariable Dim insertErrors As SqlCommand = New SqlCommand(maRequete) With insertErrors.Parameters .Add(New SqlParameter("@donneeRelevee1", SqlDbType.Real)) .Add(New SqlParameter("@donneeRelevee2", SqlDbType.Real)) End With With insertErrors .Parameters("@donnee1").Value = donneeRelevee1.Values(counterKvp) .Parameters("@donnee2").Value = donneeRelevee2.Values(counterKvp) End With IDB.send(insertErrors) counterKvp += 1 Next End Sub
J'ai pensé à une procédure de type :
Il n'y a pas un meilleur moyen ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 If donnee.Values(counterKvp) = Nothing Then .Parameters("@donnee").Value = DBNull.Value End If
Désolé pour le pavé et merci pour l'aide
Jah
Partager