Mr.Wessam Abdallah Ответов: 1

Задачу в мой код, Пожалуйста, помогите мне? ! !


Я хочу прочитать информацию о сотруднике из таблицы сотрудников и проверить, хранится ли товар в таблице посещаемости с записями дня, штрих-кода и имени, прежде чем хранить его в базе данных. При создании следующего кода данные сохраняются дважды одновременно.

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

Dim command As SqlCommand
        command = New SqlCommand("SELECT COUNT(EmpName) as EmpNameCount FROM EmployeesAttend", con)
        Dim reader As SqlDataReader = command.ExecuteReader()
        '++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        While (reader.Read())
            If reader("EmpNameCount") = 0 Then
                'حالة عدم وجود بيانات
                'حفظ البيانات مباشرة
                GetEmpInfo()
                SaveEmpInfATT()
                Clear()

            Else
                'حالة وجود بيانات
                ' التأكد من عدم وجود ازدواجية
                If con.State = ConnectionState.Open Then
                    con.Close()
                End If
                con = New SqlConnection(cs)
                con.Open()
                Dim cmd11 As New SqlCommand(" Select EmpCode from EmployeesAttend Where EmpCode = '" & TxtCode.Text.Trim & "' and AttendsDay='" & Label8.Text.Trim & "' and AttendsDate = '" & Label5.Text.Trim & "'  ", con)
                Dim dr1 As SqlDataReader = cmd11.ExecuteReader()
                '=================================
                If dr1.Read Then
                    If MsgBox(" الموظف  تم تسجيلة من قبل و لا يمكن تسجيلة مره اخرى", MsgBoxStyle.Exclamation, "منظومة الدمرداش المدرسية") = MsgBoxResult.Ok Then
                        con.Close()
                        TxtCode.SelectAll()
                        Exit Sub
                    End If
                Else
                    GetEmpInfo()
                    SaveEmpInfATT()
                    Clear()

                End If
                '=======================================
            End If
        End While

1 Ответов

Рейтинг:
11

Patrice T

Dim cmd11 As New SqlCommand(" Select EmpCode from EmployeesAttend Where EmpCode = '" & TxtCode.Text.Trim & "' and AttendsDay='" & Label8.Text.Trim & "' and AttendsDate = '" & Label5.Text.Trim & "'  ", con)

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