Dapper转换为DataTable

16

我有一个场景需要使用Dapper从查询中返回一个DataTable。 如何使用Dapper从查询中返回一个DataTable

DataTable dt = connection.Query("SELECT * FROM table");

Dapper不是这项工作的正确工具。正如Vivek所说,Dapper旨在直接映射到对象,而不是数据集。 - Chris
2个回答

14
< p > 在涉及 DataSet 的场景中,使用 dapper 没有任何优势。特别是,对于您的具体示例(没有任何参数等),它非常琐碎(并不是贬义 - 只是客观地说),您可以直接使用 ExecuteReader 或使用 DbDataAdapter

然而,我很乐意在 dapper 上公开一个 API,该 API 公开了来自 dapper 的 IDataReader API - 您可以将其提供给任何您想要的消费者,包括 DataSet / DataTable。但是我必须质疑:通过 dapper 执行此示例的是什么?如果您至少使用 dapper 来处理参数,则可能更有意义(老实说,我对参数处理的工作结果感到高兴)。


6
是的,这些都是单词。我认识其中很多。但这并不会改变任何事情:目前Dapper明确没有针对这种情况进行开发。 - Marc Gravell
2
我在研究如何将Dapper动态对象提供给SqlBulkCopy时遇到了这个问题,因此,在动态类型中添加IDataReader(甚至是IDataRecord)将非常有用。参数绑定在这种情况下已经足够有用了。 - James
3
詹姆斯时尚现在有一个返回原始读取器的API - 建议使用它。 - Marc Gravell
@MarcGravell 原始读取器适用于直接传输数据的情况。然而,我们经常需要进行转换或列添加(例如添加固定的ETL元数据列)。对象易于理解和测试;数据读取器则不太容易。能够在所有类型中重复使用相同的代码是一个优点。 - James
2
我在寻找使用Dapper生成Datatable的方法时偶然发现了这个。选择使用Dapper的唯一原因是参数处理,需要您公开一个方法,让我可以将SQL字符串和参数输入,它会输出结果SQL字符串 :) - Kyle Gobel
显示剩余3条评论

7

什么?Dapper只提供了对ADO.NET的扩展方法 - 这样您就不必处理DataTable和DataSet!

如果您需要使用DataTable和DataSet - 您仍然可以使用原始的ADO.NET SqlDataAdapter 将为您提供所有您想要的DataTable。


1
我需要用Dapper查询数据并将其提供给ReportViewer。如何使用Dapper实现?this.reportViewer.LocalReport.DataSources.Clear(); DataTable dt = new DataTable(); dt = this.inputValuesTableAdapter.GetData(); Microsoft.Reporting.WinForms.ReportDataSource rprtDTSource = new Microsoft.Reporting.WinForms.ReportDataSource(dt.TableName, dt); this.reportViewer.LocalReport.DataSources.Add(rprtDTSource); this.reportViewer.RefreshReport(); - user2421145
1
@user2421145,你尝试过不用Dapper吗?有没有其他解决方案? - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接