19. juli 2006 - 13:50Der 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();
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...
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);
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(
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;
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?
... 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.
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)
Synes godt om
Ny brugerNybegynder
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.