Fonction replace() et dbNull [Résolu]

Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 5 sept. 2013 à 10:50 - Dernière réponse : jordane45 21439 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 juin 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

jordane45 21439 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 juin 2018 Dernière intervention - 5 sept. 2013 à 14:01
0
Merci
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 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 6 sept. 2013 à 08:34
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+
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 6 sept. 2013 à 09:52
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 21439 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 juin 2018 Dernière intervention - 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 ?
Moundir76 286 Messages postés dimanche 3 octobre 2010Date d'inscription 16 mai 2014 Dernière intervention - 6 sept. 2013 à 11:29
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
jordane45 21439 Messages postés mercredi 22 octobre 2003Date d'inscriptionContributeurStatut 21 juin 2018 Dernière intervention - 6 sept. 2013 à 11:46
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.
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.