【问题标题】:Different LIKE behaviour between my application and the Access query wizard我的应用程序和 Access 查询向导之间的不同 LIKE 行为
【发布时间】:2014-02-05 08:39:53
【问题描述】:

我正在从我的 Web 应用程序执行以下查询并访问 2007 查询向导。我得到了两个不同的结果。

SELECT R.Rept_Name, D.Dist_Name,S.State_Name FROM (tblReporter AS R LEFT JOIN tblDist AS D ON R.Dist_Id=D.Dist_Id) LEFT JOIN  tblState AS S ON S.State_Id=R.State_Id WHERE R.Rept_Name LIKE '*Ra*' ORDER BY R.Rept_Name;

Web 应用程序的结果为 0 行,查询向导为 2 行。如果我删除 where 条件,则两个结果都相同。请帮助我查询有什么问题。如果需要任何其他信息,请告诉我。

Web 应用程序代码 ...

public DataTable getRept(string rept, string mobno)
{
    DataTable dt = new DataTable();
    using (OleDbConnection conn = new OleDbConnection(getConnection()))
    {
        using (OleDbCommand cmd = conn.CreateCommand())
        {
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT R.Rept_Name, D.Dist_Name,S.State_Name FROM (tblReporter AS R LEFT JOIN tblDist AS D ON R.Dist_Id=D.Dist_Id) LEFT JOIN  tblState AS S ON S.State_Id=R.State_Id WHERE R.Rept_Name LIKE '*" + rept + "*'  ORDER BY R.Rept_Name;";
            conn.Open();
            using (OleDbDataReader sdr = cmd.ExecuteReader())
            {
                if (sdr.HasRows)
                    dt.Load(sdr);
            }

        }
    }
    return dt;
}

【问题讨论】:

  • 请使用内联文本退出。您对 SQL 注入持开放态度。请为每个查询使用参数 - 即使您只是作为示例提供此参数。

标签: c# asp.net ms-access ms-access-2007


【解决方案1】:

在 Access 本身中运行的查询与从外部应用程序中运行的查询之间的 LIKE 通配符差异让您感到困惑。

从 Access 本身运行查询时,您需要使用星号作为通配符:LIKE '*Ra*'

从外部应用程序(如 C# 应用程序)运行查询时,您需要使用百分号作为通配符:LIKE '%Ra%'

【讨论】:

  • 先生,我如何在 like 运算符中使用参数化查询。像'LIKE'%@Ra%''。这不起作用。什么是正确的语法。
  • @AnilLimbani 您的查询应该使用... LIKE ? ...,并且您需要对您的PreparedStatement 对象执行setString(1, "%Ra%")。如果您需要更多帮助,请ask a new question.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多