Avatar billede ibleif Nybegynder
09. november 2004 - 17:06 Der er 12 kommentarer og
1 løsning

Hvad afgør datatyper fra DB ?

Hej alle!

Efter at have skiftet en database fra Access til MySQL (Bruger MySql.Data.MySqlClient / .NET Connector) som forbindelse, så er der en masse problemer når jeg f.eks. trækker et ID på en bruger ud fra db´en og vil ligge det i en Session. (Problemet opstår senere når jeg vil kigge på det data, som den nu har i en underlig datatype)

Det må vel være feltet i db´en, som afgør hvilken datatype man får i sit program, men hvad er den store forskel lige på et int-felt i MySQL og et i Access?

- Er der en reference et sted, hvor man kan se hvilke typer forskellige ting bliver til?

- Plejer du/I selv at sætte datatypen på f.eks. en session indeholdende et ID på en bruger?

På forhånd tak!

// Ibleif
Avatar billede arne_v Ekspert
09. november 2004 - 17:10 #1
Der kan være meget sjov med både streng of især tids felter. Jeg har aldrig
oplevet problemet med et integer felt.

Det burde være dokumenteret i MySqlDbType, men et det ihvertfald ikke i
ByteFX 0.76.
Avatar billede burningice Nybegynder
09. november 2004 - 17:12 #2
en session er altid af typen object

når du trækker ting ud af din session skal kan du caste til samme type som da du lagde "tingen" ned i sessionen.

Normalt foregår konverteringen fra MySQL-db datatypes til .net-datatypes rimelig logisk - ellers kan du bruge din readers konverteringer ala reader.GetString, reader.GetInt32 osv. Så vil du i hvert fald få de typer du forventer, og den vil kaste en exception hvis det ikke matchede typen i databasen.
Avatar billede ibleif Nybegynder
09. november 2004 - 17:40 #3
F.eks.

Hvad gør jeg forkert her? (r = MySqlDataReader)
Session("brugernavn") = r.GetString("brugernavn")

Error:
[InvalidCastException: Cast from string "brugernavn" to type 'Integer' is not valid.]

// Ibleif
Avatar billede ibleif Nybegynder
09. november 2004 - 17:41 #4
"brugernavn" i db´en er et "varchar(255)" felt..

// Ibleif
Avatar billede arne_v Ekspert
09. november 2004 - 17:46 #5
r.GetString(7)

hvis kolonnen brugernavn er den 8. kolonne
Avatar billede arne_v Ekspert
09. november 2004 - 17:47 #6
Du kan dog bruge:

r.GetString(r.GetOrdinal("brugernavn"))
Avatar billede arne_v Ekspert
09. november 2004 - 17:48 #7
Og det er da det samme for OleDb !?!?
Avatar billede ibleif Nybegynder
09. november 2004 - 19:09 #8
Den fejl der var da vist mig der lige var for hurtig. Gik jo fra r.Item(i) - så havde ikke lige set, at de andre metoder ikke kunne tage felt-navn.

Altså.. nu er jeg kommet til næste linje, som så også giver fejl:
Session("web") = r.GetInt32(r.GetOrdinal("id"))

Den giver følgende msg:
Specified cast is not valid.
at MySql.Data.MySqlClient.MySqlDataReader.GetInt32(Int32 index)

// Ibleif
Avatar billede arne_v Ekspert
09. november 2004 - 19:16 #9
Det kan man jo gætte meget på.

Eller man kan spørge driveren.

Prøv og udskriv:

r.getValue(r.GetOrdinal("id")).GetType().FullName
Avatar billede ibleif Nybegynder
09. november 2004 - 19:20 #10
For fanden da.. jeg er vist for træt til at sidde foran min computer... :p Havde set forkert på 2x "id" i 2 forskellige db´s!

Den ene var Unsigned.. så derfor ville den jo give mig en System.UInt32 istedet for en System.Int32! Min fejl!

Men.. tilbage til mit oprindelige spørgsmål.. hvordan ser jeg hvilke felter der giver hvilke datatyper? (Uden at udskrive GetType)?

// Ibleif
Avatar billede arne_v Ekspert
09. november 2004 - 19:21 #11
17:10:48 andet afsnit

så GetType er god !
Avatar billede ibleif Nybegynder
09. november 2004 - 19:32 #12
arne_v: Tak for hjælpen! Vi stopper bare her i denne omgang.. så laver jeg et nyt spørgsmål til dig, når jeg nu om lidt løber ind i nye problemer! :p (smid et svar!)

// Ibleif
Avatar billede arne_v Ekspert
09. november 2004 - 19:35 #13
svar
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