Avatar billede ttgeek Nybegynder
30. juli 2004 - 13:54 Der er 10 kommentarer og
1 løsning

Problemer med BEEP i .net fra mysql db

Hej venner.

BEEP = "ø æ og å"... underligt at jeg ikke måtte skrive "æ ø og å" i tittel. nå, annyways tilbage til problemet.

Jeg har et problem med at læste æ, ø, å fra min mysql database inde i .net applikationer. et æ læses fx som et ' tegn. Jeg har prøvet at lave både en webapplikation og en almindelig .net applikation. Der er fejl i begge typer af applikationer.

Når jeg bruger den kommando baseret sql klient der følger med mysql serveren, bliver æ ø og å vist korrekt i prompten, så jeg er sikker på at der står det rigtige i DB'en.

Her ses hvordan jeg kommunikerer med databasen:
        public ArrayList visUgeBookings(DateTime startDt)
        {
                        //sætter connection string
            MyConString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=Planner; UID=;" +
                "PASSWORD=; OPTION=3";
            this.MyConn = new OdbcConnection(MyConString);           

            //finder slut datoen for søgningen
            DateTime slutDt = startDt.AddDays(5);

            //laver sql sætning
            string sq = "SELECT Navn,StartTid,Kommentar,SlutTid,Dato,Booking.Initialer,Type FROM Medarbejdere,Booking "+
                "WHERE Medarbejdere.Initialer=Booking.Initialer AND Dato>='"+startDt.Year.ToString()+
                "-"+startDt.Month.ToString()+"-"+startDt.Day.ToString()+"' AND Dato<='"+slutDt.Year.ToString()+
                "-"+slutDt.Month.ToString()+"-"+slutDt.Day.ToString()+"'";

            //åbner db'en.
            this.MyConn.Open();

            //Opretter kommandoen og binder den sammen med forbindelsen til DB.
            OdbcCommand dbCmd = new OdbcCommand(sq,MyConn);

            //Udfører søgningen. OdbcDataReader obj skal bruges til at håndtere søgeresultatet
            OdbcDataReader dbReader = dbCmd.ExecuteReader(); 

            //opretter booking obj og tilføjer det til arrayet
            ArrayList bookings = new ArrayList();
            while (dbReader.Read())
            { 
                //formatere dato og tids objekterne
                string dbDato = dbReader["Dato"].ToString();
                DateTime dato = new DateTime(int.Parse(dbDato.Substring(6,4)),int.Parse(dbDato.Substring(3,2)),
                    int.Parse(dbDato.Substring(0,2)));

                string dbStT = (dbReader["StartTid"]).ToString();
                int H = int.Parse(dbStT.Substring(0,2));
                int M = int.Parse(dbStT.Substring(3,2));
                DateTime startT = new DateTime(1,1,1,H,M,0,0);

                string dbSlutT = dbReader["SlutTid"].ToString();
                H = int.Parse(dbSlutT.Substring(0,2));
                M = int.Parse(dbSlutT.Substring(3,2));
                DateTime slutT = new DateTime(1,1,1,H,M,0,0);

                Booking aBooking = new Booking(
                    dbReader["Initialer"].ToString(),
                    dato, startT, slutT, dbReader["Kommentar"].ToString(),dbReader["Type"].ToString()
                    );

                bookings.Add( aBooking );
            }

            //lukker forbindelser og frigør ressourser
            dbReader.Close();
            this.MyConn.Close();

            return bookings;
        }
Avatar billede arne_v Ekspert
30. juli 2004 - 14:00 #1
Ikke en forklaring men et forslag til alternativ: prøv ByteFX .NET provider
for MySQL i.s.f. ODBC.
Avatar billede arne_v Ekspert
30. juli 2004 - 14:02 #2
Derudover så skal du have styr på karaktersættene.

Ligger dine ÆØÅ i MySQL som Code Page 850 eller som ISO-8859-1 ?

Hvis ISO-8859-1 bør de kunne vises korrekt i GUI og web men forkert i Console.

Hvis Code Page 850 så omvendt.
Avatar billede ttgeek Nybegynder
30. juli 2004 - 14:10 #3
hm... well. Mit booking table ser ud som vist nederst:
Hvor sætter jeg karakter typen? også i min create eller i noget opsætning i mysql eller...

CREATE TABLE Booking(
  Initialer VARCHAR(10) NOT NULL,
  Dato DATE NOT NULL,
  StartTid VARCHAR(10) NOT NULL,
  SlutTid VARCHAR(10) NOT NULL,
  Kommentar TEXT,
  Type VARCHAR(20),

  PRIMARY KEY(Initialer, Dato),
 
  INDEX(Initialer)
  ,FOREIGN KEY (Initialer) REFERENCES Medarbejdere(Initialer)
    ON DELETE CASCADE
) TYPE=InnoDB;
Avatar billede ttgeek Nybegynder
30. juli 2004 - 14:36 #4
Hm.. ByteFX .NET provider giver mig samme fejl ved æ ø og å. Så prøver jeg at se nærmere på karakter opsætningen.
Avatar billede ldanielsen Nybegynder
30. juli 2004 - 14:43 #5
Jeg har MEGET lidt forstand på .NET men:


Prøv lige dette:

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

i web.config erstattes med

<globalization requestEncoding="utf-7" responseEncoding="utf-7" />

Bare for at prøve det, men læg lige mærke til hvad det ellers får indflydelse på
Avatar billede arne_v Ekspert
30. juli 2004 - 14:44 #6
Nej karakter sæt er noget som app der gemmer data og app der henter data
skal være enige om.

MySQL er ligeglad (bortset fra ved sortering)
Avatar billede ttgeek Nybegynder
30. juli 2004 - 15:17 #7
Hm. Jeg har lige prøvet at lave tabellerne om til deffinitionen nederst på siden. Lige meget hjalp det.
Jeg prøvede også at skifte
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
til
<globalization requestEncoding="utf-7" responseEncoding="utf-7" />
men blev slået i hovedet med en masse fejl i runtime.

Andre forslag? Kom nu arne. Jeg ved du kan. :)

CREATE TABLE Booking(
  Initialer VARCHAR(10) NOT NULL,
  Dato DATE NOT NULL,
  StartTid VARCHAR(10) NOT NULL,
  SlutTid VARCHAR(10) NOT NULL,
  Kommentar VARCHAR(200),
  Type VARCHAR(20),

  PRIMARY KEY(Initialer, Dato),
 
  INDEX(Initialer)
  ,FOREIGN KEY (Initialer) REFERENCES Medarbejdere(Initialer)
    ON DELETE CASCADE
) TYPE=InnoDB CHARACTER SET=latin1 COLLATE=latin1_danish_ci;
Avatar billede arne_v Ekspert
30. juli 2004 - 15:21 #8
Det er en ASP.NET app ?

Prøv lige at ligge nogle data med ÆØÅ ind fra din ASP.NET side og se om
de ikke vises korrekt.

Som tidliger sagt, så er der gode grunde til at tro at en console app og
en web app ikke begge kan vise ÆØÅ korrekt.
Avatar billede ttgeek Nybegynder
30. juli 2004 - 15:41 #9
AAhh.. Jeg troede jeg forstod hvad du mente, men nu forstår jeg.

Jeg havde selfølgelig lagt min test data ind i databasen vha mysql's consol app og ganske rigtigt, som du så snedigt kunne gennemskue, gemmer consol app'en æøå på en anden måde end mine .net applikationer. Løsning: gem test data ved at bruge .net applikationen.

Arne din knag. Du gjorde det igen. Lad mig øge din karma. Send et svar  :)
Avatar billede ttgeek Nybegynder
30. juli 2004 - 15:46 #10
Jeg har prøvet både i asp.net og en almindelig .net app. Løsningen virker bække steder.
Avatar billede arne_v Ekspert
30. juli 2004 - 15:47 #11
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
Kurser inden for grundlæggende programmering

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