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

Résolu
kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006 - 22 mars 2005 à 17:00
kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006 - 24 mars 2005 à 10:52
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

kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006
24 mars 2005 à 10:50
ç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 !



3
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
22 mars 2005 à 17:43
dbnull je crois, qui se trouve dans System.DBnull




<hr>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0
kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006
23 mars 2005 à 10:06
<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.
0
kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006
23 mars 2005 à 10:15
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
23 mars 2005 à 20:47
Salut,

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

yopyop
0
kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006
24 mars 2005 à 09:24
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.
0
kallahan03 Messages postés 31 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 31 mars 2006
24 mars 2005 à 10:52
Voici le lien que j'ai trouvé pour la solution : http://www.dotnet247.com/247reference/msgs/50/250564.aspx


si ça peut aider...
0
Rejoignez-nous