Vb.net ListBox index changed показывает неверное значение из базы данных sqlite
Всем привет
Я кодирую а vb.net программа, которая использует sq lite в качестве базы данных. Моя проблема заключается в том, что при загрузке формы она отображает все значения из определенного столбца ( вопросы в моем случае) из базы данных в список. Затем, если вы нажмете на какой-либо элемент ( изменение индекса списка), соответствующее значение из базы данных ( ответ) отобразится в поле rich text. До сих пор это работает так, как и ожидалось.
когда пользователь вводит что-то в текстовое поле и нажимает кнопку поиска, ожидается, что он покажет вопросы из базы данных в соответствии с текстом текстового поля в качестве столбца тега в базе данных в том же списке. это тоже прекрасно работает....Проблема начинается тогда, когда
индекс listbox теперь меняется...если результатом поиска является только один элемент в listbox, индекс будет равен нулю,а rich textbox показывает Первый элемент базы данных вместо соответствующего значения элемента listbox.
пожалуйста, помогите мне решить эту проблему.
Мой код здесь для вашего любезного рассмотрения:-
Что я уже пробовал:
<pre> Sub showData()'''this shows questions when form loads connect() Dim da As New SQLiteDataAdapter("select * from elect", connection) 'Dim dt As New DataTable Dim ds As New DataSet da.Fill(ds, "elect") Dim mySelectQuery As String = "select * from elect" Dim sqConnection As New SQLiteConnection(connection) Dim sqCommand As New SQLiteCommand(mySelectQuery, sqConnection) 'sqConnection.Open() Try Dim sqReader As SQLiteDataReader = sqCommand.ExecuteReader() ' Always call Read before accessing data. Do While sqReader.Read() Dim sName = sqReader.Item("question") ListBox1.Items.Add(sName) Loop ' always call Close when done reading. sqReader.Close() ' Close the connection when done with it. Finally connection.Close() End Try End Sub Public Sub NavigateRecords() page1.Clear()''page is rich text box connect() Dim da As New SQLiteDataAdapter("select * from elect", connection) 'Dim dt As New DataTable Dim ds As New DataSet da.Fill(ds, "elect") Dim mySelectQuery As String mySelectQuery = "select * from elect" Dim sqConnection As New SQLiteConnection(connection) Dim sqCommand As New SQLiteCommand(mySelectQuery, sqConnection) Dim num As Integer = Me.inc = Conversions.ToInteger(ListBox1.SelectedIndices.ToString) MsgBox(num) Me.inc = Conversions.ToInteger(ListBox1.SelectedIndex.ToString) If (Me.inc > -1) Then Dim ans As String = Conversions.ToString(ds.Tables.Item("elect").Rows.Item(Me.inc).Item(2)) page1.Text = (ans) End If End Sub Private Sub search() connect() Dim da As New SQLiteDataAdapter("select * from elect", connection) 'Dim dt As New DataTable Dim ds As New DataSet da.Fill(ds, "elect") Dim mySelectQuery As String = ("select * from elect WHERE tag like'%" & txtSearch.Text & "%' ") Dim sqConnection As New SQLiteConnection(connection) Dim sqCommand As New SQLiteCommand(mySelectQuery, sqConnection) Try Dim sqReader As SQLiteDataReader = sqCommand.ExecuteReader() ' Always call Read before accessing data. Do While sqReader.Read() Dim sName = sqReader.Item("question") ListBox1.Items.Add(sName) Loop If ListBox1.Items.Count = 0 Then MsgBox("Nothing Found ") showData() End If ' always call Close when done reading. sqReader.Close() ' Close the connection when done with it. Finally connection.Close() End Try End Sub Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged page1.Visible = True ListBox1.Visible = False Label1.Visible = False NavigateRecords() End Sub
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]