Avatar billede steensommer Praktikant
05. februar 2009 - 16:54 Der er 4 kommentarer og
1 løsning

VB .Net SQL kode

Følgende programmering sender data fra textboxe i en windows form til en SQL database. Det fungerer efter hensigten MEN når der i textboxen forekommer tegnet: ' så fejler koden. Hvad kan man gøre for at bedre på det:

    Sub GemSygeplejerapportDagview()
        Dim Connection As New SqlConnection(Conn)
        Connection.Open()
        Dim PatientID As String = txtHCV.Text

        Dim Database As String

        If ToolStripComboBox1.Text = "Uge 1" Then
            Database = "[Patient Sygeplejerapport - Uge 1]"
        ElseIf ToolStripComboBox1.Text = "Uge 2" Then
            Database = "[Patient Sygeplejerapport - Uge 2]"
        ElseIf ToolStripComboBox1.Text = "Uge 3" Then
            Database = "[Patient Sygeplejerapport - Uge 3]"
        ElseIf ToolStripComboBox1.Text = "Uge 4" Then
            Database = "[Patient Sygeplejerapport - Uge 4]"
        ElseIf ToolStripComboBox1.Text = "Uge 5" Then
            Database = "[Patient Sygeplejerapport - Uge 5]"
        ElseIf ToolStripComboBox1.Text = "Uge 6" Then
            Database = "[Patient Sygeplejerapport - Uge 6]"
        ElseIf ToolStripComboBox1.Text = "Uge 7" Then
            Database = "[Patient Sygeplejerapport - Uge 7]"
        ElseIf ToolStripComboBox1.Text = "Uge 8" Then
            Database = "[Patient Sygeplejerapport - Uge 8]"
        End If

        Try
            Dim Streng As String
            'Dag 0
            Streng = "CNSD0 = '" & TextBox47.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD0 = '" & TextBox48.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD0 = '" & TextBox49.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD0 = '" & TextBox50.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD0 = '" & TextBox51.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD0 = '" & TextBox52.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD0 = '" & TextBox53.Text.ToString.Trim & "'"

            'Dag 1
            Streng = Streng & ", CNSD01 = '" & TextBox222.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD01 = '" & TextBox221.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD01 = '" & TextBox220.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD01 = '" & TextBox219.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD01 = '" & TextBox218.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD01 = '" & TextBox217.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD01 = '" & TextBox216.Text.ToString.Trim & "'"

            'Dag 2
            Streng = Streng & ", CNSD02 = '" & TextBox229.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD02 = '" & TextBox228.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD02 = '" & TextBox227.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD02 = '" & TextBox226.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD02 = '" & TextBox225.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD02 = '" & TextBox224.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD02 = '" & TextBox223.Text.ToString.Trim & "'"

            'Dag 3
            Streng = Streng & ", CNSD03 = '" & TextBox236.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD03 = '" & TextBox235.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD03 = '" & TextBox234.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD03 = '" & TextBox233.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD03 = '" & TextBox232.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD03 = '" & TextBox231.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD03 = '" & TextBox230.Text.ToString.Trim & "'"

            'Dag 4
            Streng = Streng & ", CNSD04 = '" & TextBox243.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD04 = '" & TextBox242.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD04 = '" & TextBox241.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD04 = '" & TextBox240.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD04 = '" & TextBox239.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD04 = '" & TextBox238.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD04 = '" & TextBox237.Text.ToString.Trim & "'"

            'Dag 5
            Streng = Streng & ", CNSD05 = '" & TextBox250.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD05 = '" & TextBox249.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD05 = '" & TextBox248.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD05 = '" & TextBox247.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD05 = '" & TextBox246.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD05 = '" & TextBox245.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD05 = '" & TextBox244.Text.ToString.Trim & "'"

            'Dag 6
            Streng = Streng & ", CNSD06 = '" & TextBox257.Text.ToString.Trim & "'"
            Streng = Streng & ", HæmoD06 = '" & TextBox256.Text.ToString.Trim & "'"
            Streng = Streng & ", RespD06 = '" & TextBox255.Text.ToString.Trim & "'"
            Streng = Streng & ", RenD06 = '" & TextBox254.Text.ToString.Trim & "'"
            Streng = Streng & ", AbdD06 = '" & TextBox253.Text.ToString.Trim & "'"
            Streng = Streng & ", SmerterD06 = '" & TextBox252.Text.ToString.Trim & "'"
            Streng = Streng & ", AndetD06 = '" & TextBox251.Text.ToString.Trim & "'"


            Dim Command As New SqlCommand("UPDATE " & Database & " Set " & Streng & " WHERE ([Patient nr]) = ('" & PatientID & "')", Connection)
            Command.ExecuteNonQuery()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fejl opstået i GemSygeplejerapportDagview")
        End Try

        Connection.Close()

    End Sub
Avatar billede tjacob Juniormester
05. februar 2009 - 17:25 #1
Det nemmeste er at erstatte alle ' i teksten med noget andet (evt. "" -altså helt fjerne dem):

umiddelbart før linien Dim Command As... indsættes:

Streng = Streng.Replace("'",-erstatningstegn-)

Desuden er det dobbeltkonfekt at sige:
    TextBoxxxx.Text.ToString,
da Textboxxxx.Text ER en string, så du kan helt undlade ToString.
Avatar billede steensommer Praktikant
05. februar 2009 - 17:34 #2
Den havde jeg faktisk overvejet men jeg troede måske at man kunne anvende apostrof.

Det med tostring er en rigtig brøler - tak for det :-)

Jeg skal lige teste :-)
Avatar billede keysersoze Guru
05. februar 2009 - 17:38 #3
Som nævnt vil en replace kunne gøre tricket - men det vil altid være en fordel at arbejde med parametre, du undgår både en hovsa-løsning med replace og du undgår risikoen for fx SQL injection.

Parameters: http://www.startvbdotnet.com/ado/sqlparameters.aspx
SQL Injection: http://web-dev.dk/post/2008/07/SQL-injections---mere-end-bare-et-pling.aspx
Avatar billede steensommer Praktikant
05. februar 2009 - 17:56 #4
Det virker selvfølgelig fint. Svar lige så får du point og en tak :-)
Avatar billede tjacob Juniormester
05. februar 2009 - 18:25 #5
OK, -svar

-Som keysersoze nævner er den "rigtige" løsning naturligvis Parameters, så undgår man alt bøvlet med syntaksen (som jeg altid synes driller i SQL). Men det er en mere besværlig vej at gå.....

Som alternativ til keysersozes links har arne_v også lavet en guide her på sitet:
http://www.eksperten.dk/guide/832
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