Moundir76
Messages postés281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014
-
Modifié par Moundir76 le 5/09/2013 à 10:51
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024
-
6 sept. 2013 à 11:46
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 !
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024344 5 sept. 2013 à 14:01
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.
Moundir76
Messages postés281Date d'inscriptiondimanche 3 octobre 2010StatutMembreDernière intervention16 mai 2014 5 sept. 2013 à 15:29
Bonjour Jordane45,
En effet j'utilise une variable comme tu l'indiques.
Le problème est que "MaVariable" est un String.
A partir du moment ou dans la requete on met MaVariable, même si elle est égale a nothing ou DbNull.Value.ToString, cela fera une fois passé en SQL :
INSERT INTO A (libelle) VALUES ('')
Mais cela me pose problème car c'est vraiment ce '' que je veux transformer en NULL...
Merci pour ton aide
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024344 Modifié par jordane45 le 5/09/2013 à 15:42
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...
jordane45
Messages postés38144Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 avril 2024344 6 sept. 2013 à 11:24
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 ?
5 sept. 2013 à 15:29
En effet j'utilise une variable comme tu l'indiques.
Le problème est que "MaVariable" est un String.
A partir du moment ou dans la requete on met MaVariable, même si elle est égale a nothing ou DbNull.Value.ToString, cela fera une fois passé en SQL :
Mais cela me pose problème car c'est vraiment ce '' que je veux transformer en NULL...
Merci pour ton aide
Modifié par jordane45 le 5/09/2013 à 15:42
ou sinon avec dbnull :
<code>http://forums.asp.net/t/1917907.aspx?Replacing+Empty+String+with+DBNull+value
Et dans ta table, le champ que tu veux remplir, autorise t-il les valeurs null ?
Au cas où, poste le code que tu utilises pour lancer ta requête (celui où est écrit ta variable.....)
Modifié par Moundir76 le 6/09/2013 à 08:46
Merci pour ton lien très utile.
ERRATUM : Cela fonctionne très bien maintenant avec des quotes :
Merci beaucoup pour ton aide Jordane :)
A+
Modifié par Moundir76 le 6/09/2013 à 09:58
Finalement voici la solution "bidouille"
Je ne sais pas pourquoi j'ai été chercher midi à quatorze heures...
6 sept. 2013 à 11:24
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 ?