2017-02-04 5 views
1

Я пытаюсь изучить кодирование с помощью VB.net, у меня есть простое приложение CRUD (VB.net и Sqlite), где данные отображаются в сетке. все работает, кроме поиска данных.SQLite VB.net Query

Я хочу найти БД на основе имени столбца, в котором пользователь выбирает в выпадающем списке.

исходный код:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
    ' search functions 
    connect() 
    Dim da As New SQLiteDataAdapter("SELECT * FROM tbl_biodata WHERE name like '%" & TextBox1.Text & "%'", connection) 
    Dim dt As New DataTable 

    da.Fill(dt) 
    DataGridView1.DataSource = dt 
    connection.Clone() 
    da.Dispose() 
End Sub 

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

модифицированный код:

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
    ' search functions 
    connect() 
    Dim da As New SQLiteDataAdapter("SELECT * FROM tbl_biodata WHERE name like '%" & TextBox1.Text & "%'", connection) 
    Dim db As New SQLiteDataAdapter("SELECT * FROM tbl_biodata WHERE country like '%" & TextBox1.Text & "%'", connection) 
    Dim dt As New DataTable 
    If ComboBox1.SelectedValue = "name" Then 
     da.Fill(dt) 
    ElseIf ComboBox1.SelectedValue = "country" Then 
     db.Fill(dt) 

    End If 


    DataGridView1.DataSource = dt 
    connection.Clone() 
    da.Dispose() 
End Sub 

Я не могу заставить его работать. Я знаю, что моя основная проблема:

 Dim da As New SQLiteDataAdapter("SELECT * FROM tbl_biodata WHERE name like '%" & TextBox1.Text & "%'", connection) 

, но я больше не знаю, как это сделать. любая помощь очень ценится, спасибо.

+0

Посмотрите в параметризованные запросы, в противном случае вы открыты для SQL инъекций. – OneFineDay

+0

Вы говорите, что не можете заставить его работать. Это означает, что что-то происходит иначе, чем вы ожидаете. Это означает, что вы знаете, что на самом деле происходит. Почему мы этого не знаем? – jmcilhinney

+0

Зачем создавать два адаптера данных, если вы знаете, что используете их только один? По крайней мере, поместите создание адаптера данных в блок 'If ... Else', чтобы вы только создали то, что вам нужно. Еще лучше, что вы просто вставляете выбранное значение непосредственно в код SQL, а затем просто продолжаете и создаете один и тот же адаптер данных. – jmcilhinney

ответ

0

нашел ответ, спасибо всем за помощь

If ComboBox1.SelectedIndex = 0 Then 
     Dim da As New SQLiteDataAdapter("SELECT * FROM tbl_biodata WHERE name like '%" & TextBox1.Text & "%'", connection) 
     da.Fill(dt) 
     DataGridView1.DataSource = dt 
     connection.Close() 
     da.Dispose() 
    Else 
     Dim da As New SQLiteDataAdapter("SELECT * FROM tbl_biodata WHERE country like '%" & TextBox1.Text & "%'", connection) 
     da.Fill(dt) 
     DataGridView1.DataSource = dt 
     connection.Close() 
     da.Dispose() 

    End If