首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >NET DataTable跳过加载时的行(DataReader)如何解决?

NET DataTable跳过加载时的行(DataReader)如何解决?
EN

Stack Overflow用户
提问于 2018-03-12 00:06:32
回答 2查看 0关注 0票数 0

我正在尝试填充DataTable,以构建LocalReport,使用以下内容:

代码语言:txt
复制
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = new MySqlConnection(Properties.Settings.Default.dbConnectionString);
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT ... LEFT JOIN ... WHERE ..."; /* query snipped */

// prepare data
dataTable.Clear();
cn.Open();
// fill datatable
dt.Load(cmd.ExecuteReader());
// fill report
rds = new ReportDataSource("InvoicesDataSet_InvoiceTable",dt);
reportViewerLocal.LocalReport.DataSources.Clear();
reportViewerLocal.LocalReport.DataSources.Add(rds);

有一次,我注意到报告不完整,缺少一条记录。我已经改变了一些条件,以便查询返回两行,然后......

代码语言:txt
复制
 dt.Load(cmd.ExecuteReader());

当我注意到DataReader包含两个记录但DataTable只包含一个记录时。无意中,我ORDER BY在查询中添加了一个子句,并注意到这次报告显示正确。 显然,DataReader包含两行,但如果SQL查询字符串包含一个ORDER BY(否则它只能读取最后一行),DataTable将只读取它们两个。任何人都可以解释为什么会发生这种情况,以及它如何解决?

当我第一次发布这个问题时,我说它跳过了第一行; 后来我意识到它实际上只是读取最后一行,并且相应地编辑了文本(当时所有记录都分成两行,而实际上只显示最后一行时,它似乎跳过第一行)。这可能是由于它没有用于区分MySQL返回的行的唯一标识符,因此添加ORDER BY语句导致它为每行创建唯一标识符。 这只是一个理论,我没有任何支持,但我所有的测试似乎导致相同的结果。

EN

回答 2

Stack Overflow用户

发布于 2018-03-12 08:11:55

我有同样的问题。我从博客提取了提示,并在查询中放置了ORDER BY子句,以便它们可以一起为查询返回的所有记录构成唯一键。它解决了这个问题。有点奇怪。

票数 0
EN

Stack Overflow用户

发布于 2018-03-12 09:45:07

这个问题已经有好几年了,但除了上面提到的解决方法之外,我还没有找到合适的答案。

经过相当长的一段时间后,我发现DataTable.Load方法需要在底层数据中使用主键列。如果仔细阅读文档,这就变得很明显,虽然没有明确说明。

如果你有一个名为“ID”的列,它似乎使用了(它修复了我)。否则,它似乎只是使用第一列,不管它是否是唯一的,并且在它们正被读取时覆盖该列中具有相同值的行。如果你没有一个名为“id”的列,并且你的第一列不是唯一的,我建议在加载数据库之前尝试显式设置数据表的主键列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档