2017-02-04 123 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