SELECT *来自表格,如文本框。 (vb.net 2008 + ms access 2003)

时间:2013-09-23 11:14:04

标签: sql vb.net ms-access-2003

我一直在尝试为搜索按钮创建一个SQL LIKE语句来显示数据,但它不起作用。我已经尝试过搜索它,甚至复制粘贴了一些工作代码但仍然没有..我真的很新,所以请原谅我的编码失败。

(vb.net 2008 + ms access 2003) 这是我的代码:

item = txtsearch.Text
Dim con As New OleDb.OleDbConnection
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim dr As OleDbDataReader
        con.Open()

            cmd = New OleDbCommand("SELECT * FROM moviedb WHERE Title Like = '%" & item & "%' ", con)
            dr = cmd.ExecuteReader()

            If (dr.Read() = True) Then



                da = New OleDbDataAdapter("SELECT * FROM moviedb WHERE Title  = '%" & item & "%' ", con)

                da.Fill(ds, "List")

                DataGridView1.DataSource = ds.Tables("List")

     con.Close()

我也尝试将“%”更改为“*”,但是仍然没有这样做。 它在查询表达式'Title LIKE ='%@ item%''中表示语法错误(缺少运算符)。

4 个答案:

答案 0 :(得分:2)

我一直在寻找相同的方法,但这是正确的方法:

cmd = New OleDbCommand("SELECT * FROM moviedb WHERE Title Like  '%" & item & "%' ", con)

您必须删除=标志

答案 1 :(得分:1)

您的代码中存在一些问题:

首先,在哪里设置连接字符串?

 Dim con = new OleDbConnection(.....connection string here ....)

连接字符串对于打开数据库至关重要,如果没有它,则无法在连接上调用Open方法。此站点包含许多连接字符串示例,包括Access 2003 ConnectionStrings

的示例

其次,如果要搜索的文本包含单引号(当然要避免Sql注入),则需要使用参数化查询来避免问题

第三,您不需要对数据库进行两次查询,只是为了发现查询是否返回了记录。您可以直接将返回绑定到网格或测试数据集的表List中返回的行数

Dim ds As New DataSet

Using con = new OleDbConnection(......constring....)
Using cmd = new OleDbCommand("SELECT * FROM moviedb WHERE Title Like ?", con)
    con.Open()
    cmd.Parameters.AddWithValue("@p1", "%" & item & "%")
    Using da = New OleDbDataAdapter(cmd)
         da.Fill(ds, "List")
         DataGridView1.DataSource = ds.Tables("List")

    End Using
End Using
End Using

答案 2 :(得分:0)

另外,另一件事。当您使用=我找到时,您不需要LIKE运营商。

答案 3 :(得分:-1)

你可以试试这个:

"SELECT * FROM moviedb WHERE Title Like = '%" & item & "%'", con

source