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 :

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
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
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
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' ?

J'ai pensé à une procédure de type :

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
Il n'y a pas un meilleur moyen ?

Désolé pour le pavé et merci pour l'aide

Jah