C#Oledb like语句没有返回任何结果

时间:2011-08-14 12:02:28

标签: c# oledb sql-like

我正在创建一个简单的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;

3 个答案:

答案 0 :(得分:4)

嗯,从这里我可以看到一个快速解决方法:

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.Text。相反,你应该使用它:

tbxFilter.Text.Replace("'", "''")

因为如果没有加倍,'参数中的符号会损害您的SQL查询。要么就是对文本控件的处理程序执行此安全检查。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

这样的东西在我的数据库中对我有用。

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