Avatar billede grafikeren Nybegynder
19. juli 2006 - 13:50 Der er 13 kommentarer og
1 løsning

Gem streng til database

Hej.

Jeg er ved at rette et system fra Access til mySQL og her oplever jeg nogle problemer. Jeg er ikke klar over om det skyldes mySQL eller en fejl i min kode. Men tjek følgende ud:

Når man submitter en form sker følgende:

public void Submit(object sender, System.EventArgs e)
    {   
        string id = Request.QueryString["id"];
                string strHTML = "<p>ABCD EF<b>G</b>, ÆØÅ.</p>";

        OleDbConnection myConnection = CreateConnection();
        OleDbCommand command = null;
        command = new OleDbCommand("UPDATE sider SET BODYen = '"+strHTML+"' WHERE id = " + id + "", myConnection);
        command.ExecuteNonQuery();   
           
        myConnection.Close();   
        Response.Redirect("result.aspx");       
    }

Problemet er nu at den har gemt strengen forkert. I phpMyadmin viser den "< p > ABCD EF < b > G < /b > , ÆØÅ. < /p >" ... Den har dermed indsat en masse mellemrum i HTML koden, og dette giver jo store problemer ved visning...

What to do?
Avatar billede nielle Nybegynder
19. juli 2006 - 17:58 #1
Underligt. Er det det samme der sker hvis du går over til at bruge parametre:

    public void Submit(object sender, System.EventArgs e)
    {
        int id = int.Parse(Request.QueryString["id"]);
        string strHTML = "<p>ABCD EF<b>G</b>, ÆØÅ.</p>";

        OleDbConnection myConnection = CreateConnection();
        OleDbCommand command = new OleDbCommand("UPDATE sider SET BODYen = @strHTML WHERE id = @id", myConnection);

        command.Parameters.Add("@strHTML", OleDbType.VarChar, 50);
        command.Parameters.Add("@id", OleDbType.Integer);

        command.Parameters["@strHTML"].Value = strHTML;
        command.Parameters["@id"].Value = id;

        command.ExecuteNonQuery();

        myConnection.Close();
        Response.Redirect("result.aspx");
    }
Avatar billede grafikeren Nybegynder
19. juli 2006 - 19:25 #2
Hej, tak for dit svar - din løsning gemmer dog ikke noget i databasen.

Jeg har arbejdet lidt med det og lavet videre på siden - og står med et problem i forbindelse med parametre.

command = new OleDbCommand("UPDATE sider SET BODYen = '"+Editor1.XHTML+"' WHERE id = "+id+"", myConnection);
----> Indsætter i DBen, men med fejlene beskrevet i første post - altså < p > i stedet for <p>

command = new OleDbCommand("UPDATE sider SET BODYen = @content WHERE id = "+id+"", myConnection);   
command.Parameters.Add("@content", OleDbType.VarChar, 50);
command.Parameters.Add("@content", Editor1.XHTML);
----> Der gemmes intet... :o(
Avatar billede nielle Nybegynder
19. juli 2006 - 19:31 #3
Min kode burde nu helt bestemt gemme?

Det kode du selv poster er imidlertid forkert. Du skal rette:

command = new OleDbCommand("UPDATE sider SET BODYen = @content WHERE id = "+id+"", myConnection);   
command.Parameters.Add("@content", OleDbType.VarChar, 50);
command.Parameters.Add("@content", Editor1.XHTML);

- til:

command = new OleDbCommand("UPDATE sider SET BODYen = @content WHERE id = " + id, myConnection);   
command.Parameters.Add("@content", OleDbType.VarChar, 50);
command.Parameters["@content"].Value = Editor1.XHTML;
Avatar billede grafikeren Nybegynder
19. juli 2006 - 20:17 #4
Hej, tak for det.

Jeg har lavet den nye rettelse, men den gemmer stadig ikke.

command = new OleDbCommand("UPDATE sider SET BODYen = '"+Editor1.XHTML+"' WHERE id = "+id+"", myConnection);
----> Gemmes, men med fejl - altså < p > i stedet for <p>

command = new OleDbCommand("UPDATE sider SET BODYen = @content WHERE id = " + id, myConnection); 
command.Parameters.Add("@content", OleDbType.VarChar, 50);
command.Parameters["@content"].Value = Editor1.XHTML;
----> Der gemmes ikke

Jeg har udskrevet Editor1.XHTML som et tekst output og der så det fint ud uden underligt HTML formatering. Kan det have noget med mit database felt BODYen som er et text felt. Skal OleDbType.x laves om?
Avatar billede nielle Nybegynder
19. juli 2006 - 20:19 #5
Hvilken datatype er dit BODYen-felt i databasen?
Avatar billede grafikeren Nybegynder
19. juli 2006 - 20:41 #6
Det er text
Avatar billede nielle Nybegynder
19. juli 2006 - 20:46 #7
Og hvor mange tegn er der så tilladt?

Default i Access er 50 tegn. For det er vel Access vi snakker om her?
Avatar billede arne_v Ekspert
19. juli 2006 - 20:50 #8
text er OleDbType.LongVarChar

men naar du angiver max. laengde som 50, saa ....

og jeg kan ikke helt se sammenhaengen med de forkerte spaces
Avatar billede arne_v Ekspert
19. juli 2006 - 20:53 #9
nielle har ret - text i Access er VarChar - det man normalt kalder text hedder
memo i Access - glem min note
Avatar billede grafikeren Nybegynder
19. juli 2006 - 22:35 #10
Systemet kører i mySQL, som jeg skriver har det tidligere kørt på Access hvor det virkede i en lidt andne opsætning.

Gode idéer modtages med kyshånd.
Avatar billede nielle Nybegynder
19. juli 2006 - 22:38 #11
I stedet for at bruge OleDb til MySQL bør du bruge noget mere velegnet:

http://dev.mysql.com/doc/refman/4.1/en/connector-net.html
Avatar billede nielle Nybegynder
19. juli 2006 - 22:43 #12
... men ellers er det som Arne_v allerede har nævnt OleDbType.LongVarChar som skal bruges i det tilfælde. Og længden skal nok sættes til noger mere end de 50 jeg har angivet.
Avatar billede nielle Nybegynder
31. juli 2006 - 19:00 #13
Hvad med noget respons?
Avatar billede grafikeren Nybegynder
31. juli 2006 - 19:03 #14
Det kom aldrig til at virke med mySQL... Pga. tidpres kører systemet derfor fortsat i Access.

Men tak for Jeres tid, det var ærgeligt det ikke kom til at virke.

:o)
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