asp.net oledbcommand 返回所有行

Posted

技术标签:

【中文标题】asp.net oledbcommand 返回所有行【英文标题】:asp.net oledbcommand return all rows 【发布时间】:2017-01-11 02:55:58 【问题描述】:

我正在使用 Oledbconnection 连接到 Microsoft Access 数据库,并且正在使用 OleDbCommand 检索一些信息。我在数据库中有一个名为retrieveInfo 的查询,它检索3 行数据。字段中有一些重复,但这就是应该的。我的数据如下所示:

 Name          Email
 A             A@gmail.com
 B             A@gmail.com
 B             C@gmail.com

我的 C# 代码如下所示:

DataTable dt = new DataTable();
using (OleDbConnection conn = new OleDbConnection(connectionString))

    string query = "SELECT * FROM retrieveInfo";
    try
    
        conn.Open();
        DataTable info = new DataTable();
        OleDbCommand command = new OleDbCommand(query, conn);
        OleDbDataAdapter dataAdapter = new OleDbDataAdapter(command);
        info.Clear();
        dataAdapter.Fill(info);
    

我在 MS Access 中运行了retrieveInfo 查询,它返回了 3 行,如上所示。但是,当我使用 C# 运行此命令并将数据加载到数据表中时,它只显示 2 行。数据表只有第一行和第二行。我不知道这是否与原始表格属性有关,还是我的 C# 代码错误?我还尝试使用数据读取器、执行读取器并使用 while 循环读取数据。但它也只返回 2 行。

任何帮助将不胜感激!

谢谢

【问题讨论】:

所以在你执行.Fill 之后,info.Rows.Count 会立即返回 2? 你错过了关闭,因为你使用 btw.. 你的连接字符串是什么样的.. 检查这个站点如何配置 C# Connection Strings 查找 MS Access info.Clear(); 这个在甚至没有必要.. @Gord Thompson 是 Rows.Count 只返回 2。 @MethodMan 感谢您的提醒。我检查了我的连接字符串,它是正确的。因为当我使用不返回重复字段的查询访问它时,它工作得很好。所以这就是为什么我想知道它是否与返回具有重复值的行有关? 这听起来很奇怪..我以前从未经历过.. 【参考方案1】:

您可能在retrieveInfo 的定义中某处使用了“LIKE”语句,无论是在该查询本身还是在其子查询之一中。 OleDbDataAdapter 无法解析 MS Access LIKE 语句,因为它是用 Access SQL 编写的。您需要使用 ANSI LIKE(见链接)。

*** Explanation

现在我用

Like "oldmcdonal%" Or Like "oldmcdonal*"

无论是在 MS Access 中还是通过 .net 代码执行,这都会提供预期的结果集。

【讨论】:

以上是关于asp.net oledbcommand 返回所有行的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC API 操作返回 404,所有其他操作都有效

VB .NET OleDbCommand 在 SQL 语句末尾返回缺少分号 (;)

所有 ASP.NET Web API 控制器都返回 404

ASP。 NET MVC 5:如果用户是管理员,则返回所有用户的列表

ASP.Net MVC 2 RC2:当所有可选参数为空时,自定义路由返回 404

ASP.NET Web API:返回 401/未授权响应的正确方法