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 :

Convertir Nothing en NULL BDD [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut Convertir Nothing en NULL BDD
    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

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    pas lu mais pour lire : if reader.item("colonne") is system.dbnull.value
    et en écriture
    .parameters(nom).value = system.dbnull.value
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Par défaut
    Je vois un truc bizarre dans ton code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim nb As Double = Nothing
    Un double ne peut pas être Nothing, c'est le nullable(Of Double) écrit aussi Double? qui peut être Nothing.

    Donc j'ai peur que ton test plus bas utilise 0 pour nb en cas d'échec de la conversion. Tu peux tester en remplaçant nb en bas par Nothing directement. Il faudra par contre remplacer dans ton dictonnaire le Double par Double? aussi et ainsi de suite...

    Ensuite lorsque tu arrives avec un double? sur ta requête SQL, je ne sais pas s'il faut mettre un If(value Is Nothing, DbNull.Value, value) ou si le Nothing peut passer directement.

    Avec Entity FrameWork, on utilise des nullable(Of x) et avec les dataset on utilise le DbNull.Value...

  4. #4
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Merci pour vos réponses

    Sinople je ne connaissais pas pour le Double? ...

    Effectivement, après avoir changé mes procédures etc, la requête SQL bloque, l'exception me dit "La requête paramétrée '....' attend le paramètre @donnee, qui n'a pas été fourni."

    Du coup, quel est le moyen le plus "propre" de faire le If(value Is Nothing, DbNull.Value, value) ?

    Encore merci pour l'aide

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    iif ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Homme Profil pro
    Etudiant
    Inscrit en
    Octobre 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 154
    Par défaut
    Ca fonctionne !

    J'ai donc changé mes dictionnaires, procédures etc en Double?

    J'ai utilisé le IFF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Parameters("@donnee1").Value = IIf(donneeRelevee1.Values(counterKvp) Is Nothing, DBNull.Value, donneeRelevee1.Values(counterKvp))
    Impeccable, merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. valeurs null bdd
    Par philguio dans le forum Windows Forms
    Réponses: 2
    Dernier message: 16/06/2009, 22h38
  2. Réponses: 14
    Dernier message: 12/11/2008, 19h01
  3. convertir 0 en null pour un type int
    Par tortuegenie dans le forum ASP.NET
    Réponses: 4
    Dernier message: 23/10/2008, 15h31
  4. Convertir une valeur Null en zéro
    Par belecom dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 08/05/2008, 15h37
  5. convertir un type null en string (re)
    Par pierrot67 dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/01/2007, 19h27

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