Remplir un dataset avec une valeur null

Résolu
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2011
- 20 oct. 2008 à 14:30
Whismeril
Messages postés
17456
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
- 6 janv. 2014 à 17:54
Salut tout le monde ,
j'ai un petit soucis avec le remplissage d'un dateset ,
donc j'ai deux dataset (DTSetAux,DtsetDevis) qui contiennent plusieurs et les memes tables (Dev...) , je veux remplir ma table "Dev" du "DtsetDevis" a partir de la table "Dev" du "DTSetAux" qu'elle peut contenir des champs null , pour le moment j'utilise le code :
for(int k = 0; k < DTSetAux.Tables["DevisAux"].Rows.Count; k++)
{
dtSet.AuxDetail.AddAuxDetailRow(DTSetAux.Tables["DevisAux"].Rows[k][1].ToString(),
DTSetAux.Tables["DevisAux"].Rows[k][2].ToString(), DTSetAux.Tables["DevisAux"].Rows[k][3].ToString(),
Convert.ToInt32(DTSetAux.Tables["DevisAux"].Rows[k][4].ToString()),
Convert.ToSingle(DTSetAux.Tables["DevisAux"].Rows[k][5].ToString());
}
le probleme est sur les valeurs null , est-ce je suis obligé d'utiliser les if..else.. pour chaque champ pour verifier si c'est null ou non ?? ou bien il y a une propriete pour regler ce genre de probleme .
merci d'avance .

8 réponses

cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2011

21 oct. 2008 à 14:56
Re ,
j'ai trouvé une solution sans passer par les DataSet typés mais je ne sais pas si c'est la bonne et la propre la solution :
for

(
int k = 0; k < DTSetAux.Tables[
"DevisAux"].Rows.Count; k++)
{

DataRow Row = dtSet.AuxDetail.NewRow();

for (
int l = 0; l < 5; l++)
{
Row[l] = DTSetAux.Tables[
"DevisAux"].Rows[k][l + 1];
}
dtSet.AuxDetail.Rows.Add(Row);
}
merci .
3
danious
Messages postés
27
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
5 novembre 2008

20 oct. 2008 à 17:29
Bonjour,


On dirait que tu utilises des dataset types. Si c'est le cas, utiliseDTSetAux.DevisAux[k] pour accéder à la k-ème ligne. Cette ligne ne sera plus de type DataRow "générique" mais de ton type particulier (DevisAuxRow normalement). Après, il suffit d'accéder aux champs en utilisant le "." comme pour n'importe quel champ d'une classe. En faisant comme ça, tes 3 premiers paramètres de type string ne poseront plus de problème. Pour les 2 derniers, si ta méthode demande des types non nullables et que tu récupères des types nullables depuis la table "DevisAux", pense à utiliser GetValueOrDefault sur ton type nullable.

Si tu n'utilises pas les DataSet typés, tu es obligé de tester si les champs sont null (en utilisant DBNull.Value), au mieux en utilisant la construction "<condition>?<si vrai>:<si faux>;"
0
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2011

20 oct. 2008 à 17:44
bonjour "danious" ,
merci pour la reponse , mon premier DataSet (DTSetAux) n'est pas un dataset typé par contre le deuxieme est typé donc si j'ai bien compris je dois passer par un dataset typé , si c'est le cas que dois-je faire apres exactement ??
merci .
0
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2011

21 oct. 2008 à 03:18
pour la deuxieme solution , le probleme c'est que je dois tester ,si je me trompe pas, "2"puissance"nbreColonne" fois si la valeur est null pour resoudre mon probleme . donc je dois utiliser la premiere solution .
encore merci , le probleme reste ouvert et si quelqu'un a une autre solution je suis preneur .
0

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

Posez votre question
danious
Messages postés
27
Date d'inscription
jeudi 8 juillet 2004
Statut
Membre
Dernière intervention
5 novembre 2008

21 oct. 2008 à 09:10
En fait tu testerais autant de fois qu'il y a de valeurs qui peuvent être nulles, et à mon avis le temps d'exécution des tests sera très faible comparé aux temps des méthodes Convert.XXX. De toute façon, dans ton premier dataset, tu peux avoir des valeurs nulles, mais ta méthode AddAuxDetailRow ne les acceptera pas, le test est donc inévitable si tu gardes un fonctionnement similaire.
Si tu peux utiliser un dataset typé pour ton premier dataset, tu contournes le problème car tu peux directement accéder aux champs (tout l'intérêt des DataSet typés) qui seront du bon type (int, string...) et pas du type object comme quand tu as utilisé par exemple DTSetAux.Tables["DevisAux"].Rows[k][4]
Si tu peux enlever le "null autorisé" sur les champs de ta table, en leur mettant par exemple une valeur par défaut, tu n'auras plus ton problème non plus.

Sinon, simple question : pourquoi ne pas utiliser tout simplement la méthode Copy() de DataTable?

0
Amelie_29
Messages postés
41
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
30 octobre 2008
1
21 oct. 2008 à 11:13
NomDataset.Tables[





"NomMatable"

].Columns[


"NomColonne"

].AllowDBNull =


true

;

Si un champ de ta table est null : dans le dataset la valeur du champ sera égale à Dbnull.Value
0
cs_bellak
Messages postés
136
Date d'inscription
jeudi 27 décembre 2007
Statut
Membre
Dernière intervention
5 mai 2011

21 oct. 2008 à 11:46
bonjour ,
pourquoi ne pas utiliser tout simplement la méthode Copy() de DataTable?
j'ai deja essayé de mettre DataTable.Merge() mais le probleme et si vous voyez je collecte les enregistrements a partir de la deuxieme colonne , et meme je collecte que certains Rows .
et pour :
NomDataset.Tables["NomMatable"
].Columns[ "NomColonne"].AllowDBNull = true;
cette propriete indique si la valeur null est autorisee ou non et par defaut c'est true , donc inutile .
pour le moment la meilleure solution c'est les DataSet typés .
0
Mais pourquoi vous poser votre problématique et tu repond soi même O__o..j'ai suvi ton parcours parmi 3 forum de developpement en presentant ta problematique et comme tjr tu repond soi meme

et voici les lien ..meme dans un forum té trouvé seule -___-

http://social.msdn.microsoft.com/Forums/fr-FR/167a4c8e-1693-456b-b312-e5d17fd1df98/remplir-un-dataset-avec-une-valeur-null?forum=visualcsharpfr

http://forum.generation-nt.com/developpements/remplir-un-dataset-une-null-185621/

http://www.developpez.net/forums/d630290/dotnet/developpement-windows/windows-forms/remplir-dataset-null/

et ne me prend pas mal...je trouve si vous vouler partager la solution de votre problematique ça serai un grand honneur et un grand merçi de partagé l'info mieux de poser la problematique et repondre en même temps :)
0
Whismeril
Messages postés
17456
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
25 juin 2022
599
6 janv. 2014 à 17:54
Bonjour, premier point ce message date de 5 ans et quelques.
Second point, Bellack a finit par trouvé une solution qui lui convenait et l'a indiquée et partagée dans son message du 21 août 2008 à 14h56 (si elle ne te convient pas ben c'est un autre problème).
Troisième point il a posté cette même solution dans les 3 autres forum que tu as cité.
Enfin quatrième point ses messages sont polis et respectueux, commencent par bonjour, finissent par merci contrairement au tien.

Voilà 4 raisons, qui font que j'hésite à supprimer ton message.
0