Fonction replace() et dbNull

Résolu
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014 - Modifié par Moundir76 le 5/09/2013 à 10:51
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 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 !

Merci d'avance pour votre aide
A voir également:

1 réponse

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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.
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié par jordane45 le 5/09/2013 à 15:42
Tu as essayé ça ? :
if(string.IsNullOrEmpty(value)) value = null


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.....)
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
Modifié par Moundir76 le 6/09/2013 à 08:46
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+
0
Moundir76 Messages postés 281 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 16 mai 2014
Modifié par Moundir76 le 6/09/2013 à 09:58
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...
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
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 ?
0
Rejoignez-nous