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

发布于 2024-11-29 15:10:46 字数 510 浏览 1 评论 0原文

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

I'm making a simple asp.net/c# application and everything with the Oledb worked just fine until now.
The like statement is just not working through c#, it worked as a SQL Query in Access. I also tried just using '*a*' instead of '*@uname*' but it still didn't return anything.

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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

叫嚣ゝ 2024-12-06 15:10:47

问题是您没有使用正确的通配符。 Access 可以使用 *%,但大多数其他仅使用 %

The problem is that you're not using the correct wildcard character. Access can use either * or %, but most other use only %

悲凉≈ 2024-12-06 15:10:47

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

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

Something like this works for me in my DB.

dataAdapter
    .SelectCommand
    .Parameters
    .Add(new OleDbParameter("uname", "?" + tbxFilter.Text + "?"));
唔猫 2024-12-06 15:10:46

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

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 查询。要么对文本控件的处理程序执行此安全检查。

Well, from here I can see a fast way to fix it:

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

and then your parameter should be defined like this:

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

or

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

A side note: if I were you, I would not include the tbxFilter.Text directly. Instead, you should use this:

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

since a ' sign in your parameter will hurt your SQL query if not doubled. Either that or you perform this safety check on your text control's handlers.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文