Member 14588284 Ответов: 2

Vbnet обновление базы данных доступа


Привет Где моя ошибка в моем коде, поэтому я не могу обновить базу данных

Что я уже пробовал:

Sub updatesave()
           Dim Con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Veritabanı\Veritabanı.mdb")

       Dim STR1 As String
       Con.Open()
       With Form2

           Dim kosul As String = "TARIH & '|' & FIRMA &  '|'  &  FIRMACI &  '|'  & KAYITZ  = '" & .kosul.Text & "'"

           Dim A = Year(.gün.Value)
           Dim B = .gün.Value.ToString("dd/MM/yyyy")
           Dim C = .firma.Text
           Dim D = .gelenfirma.Text
           Dim E = .satinalma.Text
           Dim G = .aciklama.Text
           Dim H = .randevu.CheckState


           STR1 = "UPDATE rapor SET  YIL='" & A & "',TARIH='" & B & "',FIRMA='" & C & "',FIRMACI='" & D & "',SATINALMA='" & E & "' , ACIKLAMA='" & G & "',RANDEVU='" & H & "'" & _
                 " WHERE  TARIH & '|' & FIRMA &  '|'  &  FIRMACI &  '|'  & KAYITZ  = '" & .kosul.Text & "'"
           Dim cmd As OleDbCommand = New OleDbCommand(STR1, Con)
           cmd.ExecuteNonQuery()
           Con.Close()

       End With

   End Sub

2 Ответов

Рейтинг:
2

Patrice T

Обратите внимание, что этот код создания жала ведьмы включает в себя саму себя, и это плохо

Dim kosul As String = "TARIH & '|' & FIRMA &  '|'  &  FIRMACI &  '|'  & KAYITZ  = '" & .kosul.Text & "'"

Насколько я понимаю ваш код, я бы изменил его на что-то вроде :
STR1 = "UPDATE rapor SET  YIL='" & A & "',TARIH='" & B & "',FIRMA='" & C & "',FIRMACI='" & D & "',SATINALMA='" & E & "' , ACIKLAMA='" & G & "',RANDEVU='" & H & "' WHERE  TARIH | FIRMA |  FIRMACI | KAYITZ  = '" & .kosul.Text & "'"


Вы никогда не должны создавать SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Maciej Los

5ed!

Member 14588284

Привет,
Я изменил коды, но он не обновляется

Sub updatesave()
            Dim Con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\Veritabanı\Veritabanı.mdb")
        
        Dim STR1 As String
        Con.Open()
        With Form2

            Dim A = Year(.gün.Value)
            Dim B = .gün.Value.ToString("dd/MM/yyyy")
            Dim C = .firma.Text
            Dim D = .gelenfirma.Text
            Dim E = .satinalma.Text
            Dim G = .aciklama.Text
            Dim H = .randevu.CheckState


            STR1 = "UPDATE rapor SET  YIL='" & A & "',TARIH='" & B & "',FIRMA='" & C & "',FIRMACI='" & D & "',SATINALMA='" & E & "' , ACIKLAMA='" & G & "',RANDEVU='" & H & "'" & _
                  " WHERE  TARIH = '" & Form2.kosul1tar.Text & "' And  KAYITZ  = '" & .kosul2kzaman.Text & "' And   FIRMA = ' " & Form2.kosul3firma.Text & "'   And   FIRMACI = ' " & Form2.kosul4gfirma.Text & "'"
            Dim cmd As OleDbCommand = New OleDbCommand(STR1, Con)
            cmd.ExecuteNonQuery()

            Con.Close()

        End With
      
    End Sub

Рейтинг:
0

Dave Kreskowiak

Эта куча мусора-верхушка айсберга:

STR1 = "UPDATE rapor SET  YIL='" & A & "',TARIH='" & B & "',FIRMA='" & C & "',FIRMACI='" & D & "',SATINALMA='" & E & "' , ACIKLAMA='" & G & "',RANDEVU='" & H & "'" & _
                 " WHERE  TARIH & '|' & FIRMA &  '|'  &  FIRMACI &  '|'  & KAYITZ  = '" & .kosul.Text & "'"

Google для "атаки SQL-инъекций", чтобы узнать, почему то, что вы сделали, было настолько плохо, что вы рискуете уничтожить свою базу данных.

Для начала вам нужно переписать это, чтобы использовать параметры. Гугл для "VB.NET параметризованные запросы SQL" для примеров. Их там целая куча.

Кроме того, этот код даже не будет создавать допустимый оператор UPDATE. Предложение WHERE не может быть списком имен полей или объединяться вместе в том случае, если одно или несколько из них равно некоторому значению.

Это не то значение, где выражение:
WHERE TARIH | FIRMA | FIRMACI | KAYITZ = 'someValue'

Он должен быть переписан так, чтобы каждое поле проверялось на соответствие значению:
WHERE TARIH = ? OR FIRMA = ? OR FIRMACI = ? OR KAYITZ = ?

Есть еще много неправильных вещей, но сначала вы должны начать с основ. Получите параметризованный оператор, который работает.


Maciej Los

5ed!