Avatar billede cogitans Nybegynder
16. marts 2006 - 15:53 Der er 11 kommentarer og
1 løsning

Konstruktion af Update

Jeg har en database, hvor jeg har udtrukket noget data fra. SÅ har jeg modificeret det igen gennem nogle textboxe. Så vil jeg gerne opdatere databasetabellen, men hvordan gøres dette?

Jeg tror, jeg har styr på selve UPDATE-sætningen, men jeg har lidt problemer med forbindelsen til databasen og selve opdateringen.
Avatar billede sneakraid Nybegynder
16. marts 2006 - 17:09 #1
Hvad database bruger du? :)
Avatar billede cogitans Nybegynder
16. marts 2006 - 19:29 #2
Jeg bruger Access.
Avatar billede sneakraid Nybegynder
16. marts 2006 - 19:54 #3
Nu ved jeg ikke om du koder i VB eller C#, men jeg har her et eksempel på hvordan jeg har gjort med en editor. Henter data ind i editoren, kan ændre dataene, og så uploade det igen.

    <script language="VB" runat="server">
        Dim sConn As String="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database/data2.mdb")
        Dim sSQL As String
        Dim oConn As OleDbConnection
        Dim oCommand As OleDbCommand
        Dim oDataReader As OleDbDataReader

        Sub Page_Load(Source As Object, E As EventArgs)
            If Not Page.IsPostBack Then
                oConn=New OleDbConnection(sConn)
                oConn.Open()

                sSQL="Select * From Content where id=1"
                oCommand=New OleDbCommand(sSQL,oConn)

                oDataReader=oCommand.ExecuteReader()
                Do While oDataReader.Read()=true
                    inpTitle.Text=oDataReader("title")
                    oEdit1.Content=oDataReader("content")
                Loop
                oDataReader.Close()
                oConn.Close()
            End If
        End Sub
           
        Sub Button1_Click(Source As Object, E As EventArgs)
            oConn=New OleDbConnection(sConn)
            oConn.Open()
               
            sSQL="Update content set title='" & Replace(inpTitle.Text,"'","''") & "', content='" & Replace(oEdit1.Content,"'","''") & "' where id=1"
               
            oCommand=New OleDbCommand(sSQL,oConn)
            oCommand.ExecuteNonQuery()

            oConn.Close()
            End Sub
    </script>
Avatar billede arne_v Ekspert
16. marts 2006 - 20:11 #4
hvad med nogle parameters fremfor den Replace ?
Avatar billede cogitans Nybegynder
16. marts 2006 - 21:15 #5
Ja, jeg programmerer i c#. Så hvis jeg kunne se et eksempel i c#, så ville det da være dejligt ;-)

Parameters? Hm, tjo, det vil jeg da gerne se bare for en god ordens skyld. Men jeg tror nu ikke, det er aktuelt. For brugeren skal nemlig se de data, der skal rettes i, lave ændringer, og så skal ændringerne foretages. Så der skal vel benyttes en UPDATE?
Avatar billede arne_v Ekspert
16. marts 2006 - 21:23 #6
hvis der skal beskyttes mod SQL injection saa er parameters et godt alternativ
til den Replace som er brugt ovenfor

og det betyder ikke saa meget om det er UPDATE eller en anden SQL statement
Avatar billede cogitans Nybegynder
16. marts 2006 - 21:48 #7
Okay - jeg ved ikke noget omsql-injections.
Så det vil jeg da også gerne høre om.
Replace har jeg heller aldrig hørt om...selvom den står ovenover. Er det fordi, den er forbeholdt vb?
Avatar billede arne_v Ekspert
16. marts 2006 - 22:11 #8
Replace(inpTitle.Text,"'","''")

paa rigtig .NET maade laves som

inpTitle.Text.Replace("'","''")

i baade VB.NET og C#

I namespacet Microsoft.VisualBasic er der en Replace funktion som er
VB6/VBS kompatibel - og det er den som er brugt i ovenstaaende kode
Avatar billede arne_v Ekspert
16. marts 2006 - 22:24 #9
med hensyn til parameters saa se:
  http://www.eksperten.dk/artikler/831
Avatar billede websam Nybegynder
18. marts 2006 - 22:35 #10
Ja gør som arne_v skriver, brug parameters så er du fri for at skulle bruge den replace ting. C# er ikke mit hjørne, men prøv at se om ikke du kan få dette til at virke (Det er oversat ved hjælp af en translater)

string sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("database/data2.mdb");
string sSQL;
OleDbConnection oConn;
OleDbCommand oCommand;
OleDbDataReader oDataReader;

void Page_Load(object Source, EventArgs E)
{
if (!(Page.IsPostBack)) {
  oConn = new OleDbConnection(sConn);
  oConn.Open();
  sSQL = "Select * From Content where id=1";
  oCommand = new OleDbCommand(sSQL, oConn);
  oDataReader = oCommand.ExecuteReader();
  while (oDataReader.Read() == true) {
    inpTitle.Text = oDataReader("title");
    oEdit1.Content = oDataReader("content");
  }
  oDataReader.Close();
  oConn.Close();
}
}

void Button1_Click(object Source, EventArgs E)
{
oConn = new OleDbConnection(sConn);
oConn.Open();
sSQL = "Update content set title=@param1, content=@param2 where id=1";
oCommand = new OleDbCommand(sSQL, oConn);
oCommand.Parameters.Add("@param1", OleDbType.VarChar);
oCommand.Parameters.Add("@param2", OleDbType.VarChar);
oCommand.Parameters("@param1").Value = inpTitle.Text;
oCommand.Parameters("@param2").Value = oEdit1.Content;
oCommand.ExecuteNonQuery();
oConn.Close();
}

PS. parameters er til for at beskytte din kode mod sql injections så de er skam ret vigtige ;o)

/Websam
Avatar billede cogitans Nybegynder
19. august 2006 - 17:53 #11
Vil Arne_v lige lægge et svar?
Avatar billede arne_v Ekspert
19. august 2006 - 18:02 #12
gerne
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