2017-02-04 119 views
1

即時通訊嘗試學習使用VB.net編碼,我有一個簡單的CRUD應用程序(VB.net和Sqlite),其中的數據顯示在網格框中。除了搜索數據之外,一切都可以工作。SQLite VB.net查詢

我想根據用戶在組合框中選擇的列名來搜索數據庫。

原代碼:

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