Avatar billede Slettet bruger
12. december 2011 - 18:03 Der er 6 kommentarer og
1 løsning

Konvertering af SQLiteDataAdapter til MySqlDataAdapter

Jeg har gennem længere tid ligget på den lade side mht. programmering.

Jeg har dog nu påtaget mig en mindre opgave og har allerede løbet panden mod muren.

Jeg er ved at konvertere et script som kører med SQLite db til at køre MySQL.

Mine datas bliver sorteret via denne dropdown:

<asp:DropDownList ID="DropDownListFilter" runat="server" onchange="filter('room', this.value)">
        <asp:ListItem Text="All" Value="0"></asp:ListItem>
        <asp:ListItem Text="Single" Value="1"></asp:ListItem>
        <asp:ListItem Text="Double" Value="2"></asp:ListItem>
        <asp:ListItem Text="Tripple" Value="3"></asp:ListItem>
        <asp:ListItem Text="Family" Value="4"></asp:ListItem>
        </asp:DropDownList>

I codebehinden sker der dette:

    private void loadResources()
    {
        DayPilotScheduler1.Resources.Clear();

        string roomFilter = "0";
        if (DayPilotScheduler1.ClientState["filter"] != null)
        {
            roomFilter = (string)DayPilotScheduler1.ClientState["filter"]["room"];
        }

        //SQLiteDataAdapter da = new SQLiteDataAdapter("SELECT [id], [name], [bath], [beds] FROM [resource] WHERE beds = @beds or @beds = '0'", ConString.Get(this));
        MySqlDataAdapter da = new MySqlDataAdapter("SELECT [id], [name], [bath], [beds] FROM [resource] WHERE beds = @beds or @beds = '0'", ConString.Get(this));
        da.SelectCommand.Parameters.AddWithValue("beds", roomFilter);
        DataTable dt = new DataTable();
        da.Fill(dt);

        foreach (DataRow r in dt.Rows)
        {
            string name = (string)r["name"];
            string id = (string)r["id"];
            string bath = (string)r["bath"];
            int beds = Convert.ToInt32(r["beds"]);
            string bedsFormatted = (beds == 1) ? "1 bed" : String.Format("{0} beds", beds);

            Resource res = new Resource(name, id);
            res.Columns.Add(new ResourceColumn(bedsFormatted));
            res.Columns.Add(new ResourceColumn(bath));

            DayPilotScheduler1.Resources.Add(res);
        }
    }

Som det kan ses har jeg konverteret SQLiteDataAdapter direkte til til MySqlDataAdapter.

Dette giver mig så denne error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[id], [name], [bath], [beds] FROM [resource] WHERE beds = '0' or '0' = '0'' at line 1


Line 145:        DataTable dt = new DataTable();
Line 146:        Response.Write(dt);
Line 147:        da.Fill(dt);<-------------------
Line 148:
Line 149:        foreach (DataRow r in dt.Rows)

Jeg har somsagt ikke programmeret længe og er derfor helt blank i denne sag... ~:-|
Avatar billede arne_v Ekspert
12. december 2011 - 18:20 #1
proev og erstat:

@beds

med:

?beds
Avatar billede johny Nybegynder
12. december 2011 - 18:20 #2
Det skyldes at din SQL syntax ikke er kompatibel med MySQL. Hvis du dropper kolonne og tabel "escaping", så bør din kode kunne køre. I MySQL bruges der (vistnok) ` som escape karakter.
Avatar billede Slettet bruger
12. december 2011 - 20:07 #3
Hmm - kan jeg være så fræk og spørge til et lille eksempel...?
~;-]
Avatar billede arne_v Ekspert
12. december 2011 - 20:17 #4
Er det svaert at erstatte @ med ? og fjerne [] fra SQL'en ?
Avatar billede Slettet bruger
12. december 2011 - 20:25 #5
Narj - jeg havde ikke lige set et ` tegn havde sneget sig ind i teksten.

Jeg fik koden til at virke ved at udskifte [] med `
Avatar billede arne_v Ekspert
12. december 2011 - 20:38 #6
der er saa vodt jeg kan se ikke nogen grund til at bruge `` - ingenting burde virke fint

og jeg undrer mig hvis @paramnavn virker med MySQL - den burde kraeve ?paramnavn
Avatar billede Slettet bruger
28. januar 2012 - 12:49 #7
*lukker*

johny's svar var det afgørende...
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