读取器返回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;
问题是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