Avatar billede jps6kb Novice
10. februar 2007 - 12:33 Der er 14 kommentarer og
2 løsninger

Hente data fra Accessdatabase

Hej,

Jeg sidder og prøver at hente data ud fra en gammel Access DB.

Det går udemærket med de første par felter, men så kommer følgende:
"System.InvalidCastException: Specified cast is not valid."

Jeg har prøvet at kommentere enkelte felter ud, og erstatte med dummydata, men det har vist mig, at det både er tekst og tal felter i Access DBen.

Jeg henter ex. sådan her.

aReader.GetString(16)

På index 16 er et tekst felt uden noget specielt, men den kaster det også. Tidligere i scriptet har jeg hentet et andet tekstfelt uden problemer, og jeg har tjekket om id'et er korrekt.

Nogen der har idéer til en grund?
Avatar billede arne_v Ekspert
10. februar 2007 - 15:42 #1
husk at index 16 er det 17. felt i tabellen

den siger at det ikke er et streng felt

prøv evt. at udskrive:

aReader[16].GetType().Name

for at se hvad det er
Avatar billede jps6kb Novice
10. februar 2007 - 15:50 #2
Jep.. jeg er med på index fra ved 0.

Her er resultatet af det:

Telefon1 : String    <-- det er index 16.
KundeTypeID : Int32

Du ser mit problem.. eller om ikke andet, min forundring. :)


aReader.GetName(16) + " : " + aReader[16].GetType().Name
Avatar billede arne_v Ekspert
10. februar 2007 - 15:59 #3
hvis aReader[16].GetType().Name returnerer String så bør aReader.GetString(16)
ikke give en exception

hvordan ser resten af linien ud ?
Avatar billede jps6kb Novice
10. februar 2007 - 16:03 #4
Du kan se det her..

while (aReader.Read())
        {
            virksomheder.Add(new Virksomhed(
                aReader.GetInt32(0), //id
                aReader.GetString(8), //navn
                aReader.GetString(10), //adresse
                aReader.GetString(12), //postnr
                "by", "region", "land",
                "", //aReader.GetString(13), //telefon1
                "", //aReader.GetString(14), //telefon2
                "", //aReader.GetString(15), //fax
                "", //aReader.GetString(16), //mail
                "www", //aReader.GetString(17), //www
                "", //aReader.GetInt32(6).ToString(), //kundetype
                DateTime.Now, DateTime.Now,
                "", //aReader.GetString(20), //cvr
                "", //aReader.GetDataTypeName(3).ToString(), //selskabsform
                "", //aReader.GetInt32(21).ToString(), //kilde
                "branche",
                "", //aReader.GetString(32), //danpotstatus
                "", //aReader.GetInt32(4).ToString(), //firmastatus
                "", //aReader.GetString(23), //stærke
                "" //aReader.GetString(24) //svage
            ));
        }
Avatar billede jps6kb Novice
10. februar 2007 - 16:06 #5
Ja okay.. 16 var ikke lige telefon, men mail.. men gør ingen forskel. ;)
Avatar billede kalp Novice
10. februar 2007 - 16:29 #6
hvis nu du prøver

object felt = aReader.Item[16];

og så prøv at tjek typen på objektet.. eller kald .ToString() på det..

ps. kan være du skal kalde den via. aReader.Item["mail"];
Avatar billede jps6kb Novice
10. februar 2007 - 16:35 #7
OleDbDataReader har ikke en Item?
Avatar billede kalp Novice
10. februar 2007 - 16:37 #8
Avatar billede jps6kb Novice
10. februar 2007 - 16:40 #9
Compiler Error Message: CS0117: 'System.Data.OleDb.OleDbDataReader' does not contain a definition for 'Item'

object felt = aReader.Item["mail"];

Har også prøvet med
object felt = aReader.Item[16];
Avatar billede kalp Novice
10. februar 2007 - 16:47 #10
sjovt:) nåh, men så må det her være ca. det samme

object test = aReader.GetValue(16);
Avatar billede kalp Novice
10. februar 2007 - 16:48 #11
ahh sorry.. nu husker jeg.. det før skal bare skriver som

aReader[16]

og det returnere et object.. som du evt. kan typecaste eller udføre det jeg nævnte på
Avatar billede jps6kb Novice
10. februar 2007 - 17:12 #12
Jeg kan godt læse værdien i mail-feltet sådan. Men jeg ville meget gerne kunne bruge .GetString på dem..
Avatar billede kalp Novice
11. februar 2007 - 00:32 #13
ja men er lidt lost på hvorfor den ikke vil godtage det... hvis det er en string i databasen må den være okay jo, men måske er det en anden grund (noget i din kode) som gør det.


du kan jo lige prøve

string test = (string)aReader.GetString(16);
Avatar billede jps6kb Novice
19. marts 2007 - 13:39 #14
Jeg fik det aldrig til at virke, på "den rigtige måde" men det kører da nu.

Smider i et svar..
Avatar billede kalp Novice
19. marts 2007 - 13:57 #15
ok
Avatar billede arne_v Ekspert
19. marts 2007 - 19:25 #16
ok
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