Fonction replace() et dbNull [Résolu]

Signaler
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014
-
Messages postés
28950
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 juillet 2020
-
Bonjour,

Lors d'une requête SQL INSERT, j'ai un champs qui peut être vide.
Sauf que si c'est vide alors c'est un String vide => ""
Je souhaiterais que dans ma requête apparraisse non pas
INSERT INTO A (libelle) VALUES ('')


mais plutôt
INSERT INTO A (libelle) VALUES (NULL)


Afin d'avoir dans ma base un champs qui a pour valeur NULL et non pas une chaine de caracteres vide.

J'ai pensé à replace() mais les paramètres sont des strings.

Je pense qu'il doit exister une astuce pour contourner ce souci mais je ne vois pas laquelle !

Merci d'avance pour votre aide

1 réponse

Messages postés
28950
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 juillet 2020
333
Bonjour,

Je suppose que tu ne passes pas directement ta requête ainsi :
INSERT INTO A (libelle) VALUES (NULL)

Mais en utilisant une variable :
INSERT INTO A (libelle) VALUES (MaVariable)

Si c'est le cas, tu testes si cette variable est vide et tu lui assignes la valeur null ou Nothing
ça devrait fonctionner.
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014

Bonjour,

Merci pour ton lien très utile.

  Dim req As New SqlCommand("INSERT INTO A (id, libelle) VALUES (1, " & IIf(String.IsNullOrEmpty(maVariable), DBNull.Value, maVariable) & ")", maConnexion)


ERRATUM : Cela fonctionne très bien maintenant avec des quotes :

  Dim req As New SqlCommand("INSERT INTO A (id, libelle) VALUES (1, " & IIf(String.IsNullOrEmpty(maVariable), DBNull.Value, "'" & maVariable & "'") & ")", maConnexion)


Merci beaucoup pour ton aide Jordane :)

A+
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014

Je dois être fou, ca ne fonctionne pas Oo. J'étais persuadé que ca renvoyais bien un NULL mais a priori non !

Finalement voici la solution "bidouille"


 If maVariable = "" Then
            maVariable = "NULL"
        End If

Dim req2 As New SqlCommand("INSERT INTO A (id, libelle) VALUES (2, " & maVariable & ")", maConnexion)




Je ne sais pas pourquoi j'ai été chercher midi à quatorze heures...
Messages postés
28950
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 juillet 2020
333
Bonjour,
Y'a un souci dans ton code...
 maVariable = "NULL"

Affecte une STRING "NULL" et non la valeur NULL.

C'est étonnant que ça n'ai pas fonctionné avec le code
Dim req As New SqlCommand("INSERT INTO A (id, libelle) VALUES (1, " & IIf(String.IsNullOrEmpty(maVariable), DBNull.Value, "'" & maVariable & "'") & ")", maConnexion)


Encore une fois, comment est faite ta table ?
Le champ 'libelle' est déclaré comment ? Il autorise les valeurs nullls ?
Messages postés
286
Date d'inscription
dimanche 3 octobre 2010
Statut
Membre
Dernière intervention
16 mai 2014

Le champs libellé est déclaré en varchar(50) et le NULL est autorisé.
Mais dans SQL Server si je ne me trompe pas, quand on rentre NULL, il voit bien ca comme un DbNull
Messages postés
28950
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
14 juillet 2020
333
Ben je t'avouerai que je n'ai pas touché à SQL server depuis longtemps et je n'en ai pas sous la main pour tester..
Si dans ta table il te met bien la valeur comme tu le souhaites tant mieux. ^^

Bonne journée et bonne continuation.