xkarmax Ответов: 3

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


Я создал combobox и заполнил его при загрузке формы, и всякий раз, когда я выбираю сотрудника в combobox, он работает хорошо. Но всякий раз, когда я выбираю сотрудника с фамилией "Баутиста", я получаю неправильный employeeid. Когда я смотрю на отладчик, employeeid выбранного мной сотрудника равен 100009, но реальное значение идентификатора равно 10008.

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

ds = sqlfunction.getTable("SELECT * FROM TABLE")
With cmb_employee
            .DataSource = ds.Tables(0)
            .ValueMember = "employeeid"
            .DisplayMember = "sname"
        End With


Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Dim  employee As String

employee = cmb_employee.SelectedValue.ToString.Trim
LoadLoans2( employee)
End Sub

Private Sub LoadLoans2(ByVal type As String, ByVal employee As String, ByVal status As String)
        Dim ds As DataSet
        DataGridView1.DataSource = Nothing

        ds = sqlFunctions.getTable("select * FROM TABLE WHERE employeeid=employeeid AND loanid="THE VALUE THAT I SELECT")
        With DataGridView1
            .AutoGenerateColumns = True
            .DataSource = ds.Tables(0)
        End With
        ds.Dispose()
    End Sub

3 Ответов

Рейтинг:
2

OriginalGriff

На первый взгляд, это потому, что вы не используете значение - employee является локальной переменной, что означает, что она доступна только внутри метода обработчика:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    Dim  employee As String

    employee = cmb_employee.SelectedValue.ToString.Trim
End Sub
Поскольку вы ничего не делаете с ним внутри метода и он отбрасывается, когда вы уходите, выбранное значение фактически не используется в вашем коде.

Если то, что вы говорите, это employee содержит неправильное значение внутри метода (но пример кода, который Вы нам дали, сокращен, поэтому мы не можем видеть, что вы на самом деле делаете с ним), вам нужно использовать отладчик, чтобы точно узнать, какое значение он содержит, что такое SelectedItem, что такое SelectedText.

Извините, но мы ничего не можем сделать для вас!


xkarmax

На самом деле я отправляю выбранное значение другому субподрядчику. Я пытаюсь получить их кредитный отчет

OriginalGriff

Так при чем тут отладчик показывают, происходит?

xkarmax

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

Рейтинг:
13

Richard Deeming

Проблема, похоже, заключается в вашем запросе:

ds = sqlFunctions.getTable("select * FROM TABLE WHERE employeeid=employeeid AND loanid="THE VALUE THAT I SELECT")
Вы просите записи, где employeeid колонка равна самой себе, а loanid столбец равен выбранному вами идентификатору сотрудника.

Вы также, кажется, написали вспомогательный метод, который заставляет вас писать код, уязвимый для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]


xkarmax

на самом деле параметром для employeeid является employee. я просто вошел кодсотрудника=кодсотрудника но исходный запрос является employeeid='" & &усилителя работника; "'

Richard Deeming

Таким образом, ваш код определенно уязвим для SQL-инъекций.

xkarmax

Я уже решил этот свой вопрос. Там нет никаких проблем с моим кодом, проблема заключается в том, что имя сотрудника имеет специальный символ тире(-). Все, что я делал, было заменить тире на wghite пространства .заменить("-"," ") таким образом, система будет игнорировать тире без изменения базы данных

Richard Deeming

Ваш код уязвим для SQL-инъекций. Трехлетний ребенок может взломать вашу базу данных[^Я бы сказал, что это довольно большая проблема с вашим кодом!

Рейтинг:
1

xkarmax

I already solve this issue of mine. There's no problem with my code, the problem reside with the employee name it has a special character dash(-). All i did was replace the dash to wghite space .replace("-"," ") so the system will ignore the dash without changing the database


phil.o

Именно поэтому вы должны были использовать параметризованные запросы в первую очередь.
Вы решили игнорировать советы, говорящие вам исправить эту проблему ; она может вернуться и укусить вас в любой момент времени.