Avatar billede website Nybegynder
25. august 2008 - 18:00 Der er 8 kommentarer

Datatype converting! -Help!

Jeg har lidt problemer med dataconvertering.
Jeg henter data fra databasen og  tilskriver det til ret.alder...Jeg har defineret alder som int . Jeg læser "nummer" fra databasen som er der defineret som numeric(9)

ret.alder= Int32.parse(reader["nummer"].tostring());

Jeg får fejlen noget i retning af  IndexOverflow
Avatar billede arne_v Ekspert
25. august 2008 - 18:09 #1
Proev:

ret.alder = (int)(decimal)reader["nummer"];
Avatar billede mikalj Nybegynder
26. august 2008 - 00:46 #2
Jeg plejer at bruge
ret.alder = Convert.ToInt32(reader["nummer"]);
Avatar billede arne_v Ekspert
26. august 2008 - 01:13 #3
cast - i det tilfælde castene - er lidt hårdere til at enforce type sikkerhed - det kan
jeg godt lide
Avatar billede mikalj Nybegynder
26. august 2008 - 07:54 #4
Det var bare for at give et alternativ.
Desuden kan "ToInt32" kun returnere en int, jeg ved ikke lige hvordan det er mindre strikt end cast.

Jeg tror i det her tilfælde er det udelukkende et spørgsmål om smag.
Avatar billede arne_v Ekspert
26. august 2008 - 15:12 #5
Det er ikke type sikkerhed paa retur vaerdi men type sikkerhed paa
argument !
Avatar billede website Nybegynder
26. august 2008 - 19:08 #6
Fejlen lå i at jeg havde et mellemrum efter "nummer" reader["nummer "]);
Avatar billede mikalj Nybegynder
27. august 2008 - 08:03 #7
Nu er der jo sådan set heller ikke typesikkerhed på (int)(decimal)reader["nummer"]'s argument.
reader["nummer"] kunnne være en hvilken nummer type; int16, int32, float, double, osv.
Forskellen er bare at Convert.ToInt32 også kan tage en string.

Når jeg skal konvertere database værdi foretrækker jeg normalt Convert.ToInt32 _netop_ fordi den ikke er så kræsen med hvilken type argumentet er.
Jeg siger ikke det er forkert at bruge cast, men det er heller ikke mere korrekt end Convert.ToInt32. Som sagt er det hovedsageligt at spørgsmål om smag.
Avatar billede arne_v Ekspert
27. august 2008 - 15:47 #8
Forkert.

Item returnerer et object og en boxed int16/int32/float/double kan ikke castes til decimal. Et
boxed object kan kun castes til den unboxed type. Hvis man skal have en anden
value type saa skal man dobbelt caste. Som i mit eksempel.

Saa det er ikke et spoergsmaal om smag og behag. Det er et spoergsmaal om man
vil have en type safe loesning med cast eller man vil have en mindrer type safe
loesning med Convert. Jeg antager at de fleste der bruger C# gaar ind for
maksimal type safeness.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester