[ASP.Net] Insérer une valeur nulle dans un dataset

Résolu
Signaler
Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006
-
Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006
-
Bonjour à tous

j'ai un datagrid complet (insert, update, delete) dans lequel je liste avec un dataset des produits qui ont chacun un prix normal et un prix promo.
lorsque je modifie ou créé un produit, j'oblige à saisir un prix normal mais le prix promo est facultatif.
dans ma base données Sql server, les champs prix et prix promo sont float.
cependant, je suis obligé de vérifier le champ prix promo afin d'insérer une valeur "Nothing" si le champ est vide car j'ai une erreur lorsque je tente d'insérer une valeur nulle.
"Nothing" insère un 0 dans le champ float.

avec un peu de code ça sera plus clair :

<HR>

Dim iCodePneu As Integer = CType(dgPneusFournisseurs.DataKeys(e.Item.ItemIndex), Integer)
Dim iCodeFournisseur As Integer = CType(e.Item.Cells(0).Text, Integer)
Dim iCodePneuFournisseur As String = CType(e.Item.FindControl("tbEditCodeFournisseur"), TextBox).Text
Dim fPrix As Double = CType(e.Item.FindControl("tbEditPrix"), TextBox).Text

Dim fPrixPromo As Double


If CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text <> Nothing Then



fPrixPromo = CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text


Else



fPrixPromo = Nothing


End If


Dim fRemise As Double


If CType(e.Item.FindControl("tbEditRemise"), TextBox).Text <> Nothing Then



fRemise = CType(e.Item.FindControl("tbEditRemise"), TextBox).Text


Else



fRemise = Nothing


End If


Dim iStock As Integer = CType(e.Item.FindControl("tbEditStock"), TextBox).Text
Dim sCommentaire As String = CType(e.Item.FindControl("tbEditCommentaire"), TextBox).Text


Dim ModifRow As DataSet2.PNEU_FOURNISSEURRow


ModifRow = dsInsertPneusFournisseurs.PNEU_FOURNISSEUR.FindBycode_pneucode_fournisseur(iCodePneu, iCodeFournisseur)


With ModifRow



.code_pneu_fournisseur = iCodePneuFournisseur
.prix_pneu_fournisseur = fPrix
.prix_promo_pneu_fournisseur = fPrixPromo (si ici je met une valeur autre que Nothing ou une valeur float, j'obtiens une erreur)
.remise_pneu_fournisseur = fRemise
.stock_pneu_fournisseur = iStock
.comment_pneu_fournisseur = sCommentaire


End With


daInsertPneusFournisseurs.Update(dsInsertPneusFournisseurs)dvPneusFournisseur.RowFilter "code_pneu " & iCodePneu
dvPneusFournisseur.Sort = "code_fournisseur"
daPneusFournisseur.Fill(dsInsertPneusFournisseurs)
dgPneusFournisseurs.EditItemIndex = -1
dgPneusFournisseurs.DataBind()

<HR>

Voila, ce que je souhaiterai, c'est savoir comment insérer une valeur nulle ("NULL") dans un champ float de la base de données avec un dataset

Merci à tous pour votre aide.

7 réponses

Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006

ça y est ! j'ai trouvé la solution :


With ModifRow



....

.Setprix_promo_pneu_fournisseurNull()
....


End With

Il faut utiliser la propriété Set<Nom_du_champ>Null() de l'objet Dataset

Que du bonheur !



Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
29
dbnull je crois, qui se trouve dans System.DBnull




<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006

<HR>
Comment utiliser System.DBnull ?
J'ai essayé plusieurs manières :

<HR>


Dim fPrixPromo As Double


If CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text <> Nothing Then



fPrixPromo = CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text


Else



fPrixPromo = Convert.ToDouble(DBNull.Value)


End If


<HR>
Ou bien :

<HR>

Dim fPrixPromoNull As DBNull
Dim fPrixPromo As Double


If CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text <> Nothing Then



fPrixPromo = CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text


Else



fPrixPromoNull = DBNull.Value


End If


<HR>
Mais lorsque j'insère dans mon dataset avec l'une ou l'autre de ces méthodes j'obtiens une erreur :

.prix_promo_pneu_fournisseur = fPrixPromo ou bien fPrixPromoNull

Merci.
Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006

J'ai également testé cette méthode :


Dim fPrixPromo As Double


Dim fPrixPromoNull As DBNull


Dim bPrixPromoNull As Boolean = False


If CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text <> Nothing Then



fPrixPromo = CType(e.Item.FindControl("tbEditPrixPromo"), TextBox).Text


Else



bPrixPromoNull = True


fPrixPromoNull = Nothing


End If


With ModifRow
...



If bPrixPromoNull Then



.prix_promo_pneu_fournisseur = Convert.ToDouble(fPrixPromoNull)


Else



.prix_promo_pneu_fournisseur = fPrixPromo


End If


...
End With

mais cette méthode insère un 0 dans le champ prix_promo_pneu_fournisseur (float) dans la base données, alors que je souhaite une valeur NULL.
Messages postés
586
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 février 2010
1
Salut,

est-ce que ta colonne dans ta table est bien définie ?
Default value = NULL ou isnullable ?

yopyop
Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006

Oui, dans ma table, le champ a bien la valeur NULL par défaut, mais lorsque je teste avec .prix_promo_pneu_fournisseur = Nothing, cela insère un 0 au lieu d'une valeur nulle.
Messages postés
31
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
31 mars 2006

Voici le lien que j'ai trouvé pour la solution : http://www.dotnet247.com/247reference/msgs/50/250564.aspx


si ça peut aider...