Dapper不支持返回DataSet,因其设计聚焦于高效SQL执行与强类型对象映射,刻意省略DataAdapter/DataSet等重量级抽象;可通过复用IDbConnection配合原生DataAdapter.Fill()实现,或封装扩展方法桥接,但推荐优先使用Query或GridReader等现代方式。

Dapper 本身不直接支持返回 DataSet,因为它是一个轻量级 ORM,专注于快速执行 SQL 并映射到强类型对象(如 List<t></t> 或单个实体),而不是 ADO.NET 的传统数据容器(如 DataSet、DataTable)。
为什么 Dapper 不提供 FillDataSet 方法
Dapper 的设计哲学是“只做一件事,并把它做好”——高效执行 SQL + 对象映射。它绕过了 DataAdapter 和 DataSet 这类较重的抽象层,因此没有内置的 FillDataSet() 或类似扩展方法。
如何用 Dapper 配合 ADO.NET 填充 DataSet
你可以手动使用 Dapper 获取 IDbConnection,再结合原生 ADO.NET 的 DataAdapter.Fill() 来填充 DataSet。关键点是:复用连接、避免重复打开/关闭。
- 确保连接已打开(Dapper 不自动管理连接状态,需自己控制)
- 用同一个连接创建
DataAdapter(如SqlDataAdapter) - 调用
Fill()方法填充DataSet
示例(SQL Server):
using (var connection = new SqlConnection(connectionString))
{
connection.Open(); // 必须显式打开
<pre class="brush:php;toolbar:false;">var dataSet = new DataSet();
using (var adapter = new SqlDataAdapter("SELECT * FROM Users; SELECT * FROM Orders;", connection))
{
adapter.Fill(dataSet); // 自动创建两个 DataTable
}
// dataSet.Tables[0] → Users
// dataSet.Tables[1] → Orders登录后复制
}
如果坚持用 Dapper 语法风格封装 FillDataSet
可以自己写一个简单扩展方法,把连接和 SQL 封装起来,让调用更接近“Dapper 风格”:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~