类似c# Oledb的语句不返回任何结果

本文关键字:返回 任何 结果 语句 Oledb 类似 | 更新日期: 2023-09-27 18:05:26

我正在制作一个简单的asp.net/c#应用程序,直到现在,Oledb的一切都工作得很好。like语句只是不能在c#中工作,它在Access中作为SQL查询工作。我也试过只使用'*a*'而不是'*@uname*',但它仍然没有返回任何东西。

OleDbDataAdapter dataAdapter = new OleDbDataAdapter(
    "SELECT accounts.ID, uname, firstname, lastname, description FROM accounts, profiles " +
    "WHERE accounts.ID = profiles.ID AND uname like '*@uname*'", connection);
dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = tbxFilter.Text;

类似c# Oledb的语句不返回任何结果

好吧,从这里我可以看到一个快速的方法来修复它:

WHERE accounts.ID = profiles.ID AND uname like @uname

,然后你的参数应该这样定义:

dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = "%" + tbxFilter.Text + "%" 

dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = "*" + tbxFilter.Text + "*".
边注:如果我是你,我不会包括tbxFilter。直接的文本。相反,您应该使用以下命令:
tbxFilter.Text.Replace("'", "''")

,因为参数中的'符号如果没有加倍,将会影响SQL查询。或者对文本控件的处理程序执行此安全检查。

问题是您没有使用正确的通配符。访问可以使用*%,但大多数人只使用%

这样的东西在我的DB中为我工作。

dataAdapter
    .SelectCommand
    .Parameters
    .Add(new OleDbParameter("uname", "?" + tbxFilter.Text + "?"));