读取器返回5行,数据表有1行

本文关键字:数据表 1行 5行 返回 读取 | 更新日期: 2023-09-27 18:26:07

我有一条sql语句,正试图对sqlite数据库执行。

问题是,只有这一条sql语句,数据表会报告1行事件,但如果我查看阅读器,它在结果视图中有5行。

SQL:

SELECT 
    f.host_id,h.hostname,h.computer_name_dns_fully_qualified,
    l.username,l.logon_domain 
FROM scans s 
LEFT JOIN hosts h ON h.scan_id=s.scan_id 
LEFT JOIN logged_on_users l ON l.host_id=h.host_id 
LEFT JOIN hosts f ON f.computer_name_netbios LIKE l.logon_ser...

这就是它的名字:

        var dt = new DataTable();
        try
        {
            var com = new SQLiteCommand(_con) { CommandText = sql };
            var reader = com.ExecuteReader();
            dt.Load(reader);
            reader.Close();
        }
        catch
        {
        }
        return dt;

读取器返回5行,数据表有1行

问题是MSDN文章中描述的数据表填充方法匹配主键并覆盖每一行。我知道,如果这是真的,只会返回最后一排。我返回并取消了所有代码更改,果不其然,只返回了最后一行。这是因为加载到数据表中的每一行都覆盖了之前的行。如果您有这个问题,而我现在已经被指向一些线程——有些线程已经存在了4年,没有解决方案——请停止、删除并检查一个特定列中的所有值是否相同;Datatables很可能按该列为数据设置键。

将订单添加到查询中。DataTables需要一个唯一的字段来处理,order by将对此进行排序。由于数据表可以通过向其中加载读取器来更新其中的内容。

请参阅:类似问题

避免空的catch块,因为它会导致这样的问题。而是记录异常和/或引发异常。http://www.codeproject.com/Articles/9538/Exception-Handling-Best-Practices-in-NET

Load方法从加载的IDataReader中消耗第一个结果集,在成功完成后,将读取器的位置设置为下一个结果集(如果有)。

显然存在一个异常,因此您只能在DataTable中看到一行。因此,您应该设置一个断点来查看发生了什么。

当出现属于finally块的异常(或使用using语句)时,也不会关闭连接。

您的连接扫描到主机,主机扫描到logged_on_users,然后在logged_on_users上进行过滤。如果带有过滤器的表产生多行,那么您将获得笛卡尔乘法。

尝试将查询的一部分分解为子查询。

此外,如果这是SQL Server,请向businessstudio索取查询计划-将其作为图片发布,我们可以清楚地回答。

谢谢Simon