C#Oledb之类的语句不返回任何结果

Dan*_*tra 2 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;
Run Code Online (Sandbox Code Playgroud)

Vla*_*mir 5

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

WHERE accounts.ID = profiles.ID AND uname like @uname
Run Code Online (Sandbox Code Playgroud)

然后应按以下方式定义您的参数:

dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = "%" + tbxFilter.Text + "%" 
Run Code Online (Sandbox Code Playgroud)

要么

dataAdapter.SelectCommand.Parameters.Add("@uname", OleDbType.VarChar).Value = "*" + tbxFilter.Text + "*".
Run Code Online (Sandbox Code Playgroud)

附带说明:如果我是您,则不会直接包含tbxFilter.Text。相反,您应该使用以下代码:

tbxFilter.Text.Replace("'", "''")
Run Code Online (Sandbox Code Playgroud)

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