0

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

(vb.net 2008 + ms 访问 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

4 回答 4

2

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

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

你必须删除=标志

于 2013-11-12T09:44:29.797 回答
1

您的代码中有一些错误:

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

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

连接字符串对于打开数据库是必不可少的,没有它就不能在连接上调用 Open 方法。该站点包含很多连接字符串示例,包括 Access 2003 ConnectionStrings的示例

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

第三,您不需要为了发现查询返回的记录而查询两次数据库。您可以直接将返回绑定到您的网格或测试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
于 2013-09-23T11:36:54.333 回答
0

另外,还有一件事。=当您使用LIKE我发现时,您不需要操作员。

于 2013-09-23T12:25:32.247 回答
-1

你可以试试这个:

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

资源

于 2013-09-23T11:21:26.683 回答