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 !
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)
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...
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 ?
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
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. ^^
Merci pour ton lien très utile.
ERRATUM : Cela fonctionne très bien maintenant avec des quotes :
Merci beaucoup pour ton aide Jordane :)
A+
Finalement voici la solution "bidouille"
Je ne sais pas pourquoi j'ai été chercher midi à quatorze heures...
Y'a un souci dans ton code...
Affecte une STRING "NULL" et non la valeur NULL.
C'est étonnant que ça n'ai pas fonctionné avec le code
Encore une fois, comment est faite ta table ?
Le champ 'libelle' est déclaré comment ? Il autorise les valeurs nullls ?
Mais dans SQL Server si je ne me trompe pas, quand on rentre NULL, il voit bien ca comme un DbNull
Si dans ta table il te met bien la valeur comme tu le souhaites tant mieux. ^^
Bonne journée et bonne continuation.