9.6、DataSet、DataTable 操作

ADO.NET 拥有非常强大的 DataTable 和 DataSet 功能,对它们的支持不能落下。

Hoa Framework 框架中已经集成了 DataSetDataTable 的支持,支持 Sql存储过程 两种方式。

在Hoa Framework v1.4.0 版本新增了 切面上下文功能,也就是下面的代码不再推荐使用,见 9.12、切面上下文(TangentDbContext)章节。

DataSet

sql 查询并返回 DataSet(不推荐)

var dataSet = _testRepository.SqlDataSetQuery(@"
    select * from A;
    select * from B;
    select * from C;
", params);

存储过程执行返回 DataSet(不推荐)

var dataSet = _testRepository.SqlProcedureDataSetQuery("存储过程名", new PROCModel{});

DataSet 转换成 List 对象(推荐) 👈

上面两种方式返回的是 DataSet 对象,还需要我们自己转换一次。

这里,Hoa Framework 提供了更方便的泛型操作方式,直接将多个表输出为对象方式。

🏴sql 返回多个表并将多个表转成对象

// 纯 sql 方式
var data1 = _testRepository.SqlDataSetQuery<T1>(@"sqls...", params);
var (data1, data2) = _testRepository.SqlDataSetQuery<T1, T2>(@"sqls...", params);
var (data1, data2, data3) = _testRepository.SqlDataSetQuery<T1, T2, T3>(@"sqls...", params);
var (data1, data2, data3, data4) = _testRepository.SqlDataSetQuery<T1, T2, T3, T4>(@"sqls...", params);
var (data1, data2, data3, data4, data5) = _testRepository.SqlDataSetQuery<T1, T2, T3, T4, T5>(@"sqls...", params);
var (data1, data2, data3, data4, data5, data6) = _testRepository.SqlDataSetQuery<T1, T2, T3, T4, T5, T6>(@"sqls...", params);
var (data1, data2, data3, data4, data5, data6, data7) = _testRepository.SqlDataSetQuery<T1, T2, T3, T4, T5, T6, T7>(@"sqls...", params);
var (data1, data2, data3, data4, data5, data6, data7, data8) = _testRepository.SqlDataSetQuery<T1, T2, T3, T4, T5, T6, T7, T8>(@"sqls...", params);

🏴 存储过程 返回多个表并将多个表转成对象

// 存储过程方式
var data1 = _testRepository.SqlProcedureDataSetQuery<T1>("存储过程名", new PROCModel{});
var (data1, data2) = _testRepository.SqlProcedureDataSetQuery<T1, T2>("存储过程名", new PROCModel{});
var (data1, data2, data3) = _testRepository.SqlProcedureDataSetQuery<T1, T2, T3>("存储过程名", new PROCModel{});
var (data1, data2, data3, data4) = _testRepository.SqlProcedureDataSetQuery<T1, T2, T3, T4>("存储过程名", new PROCModel{});
var (data1, data2, data3, data4, data5) = _testRepository.SqlProcedureDataSetQuery<T1, T2, T3, T4, T5>("存储过程名", new PROCModel{});
var (data1, data2, data3, data4, data5, data6) = _testRepository.SqlProcedureDataSetQuery<T1, T2, T3, T4, T5, T6>("存储过程名", new PROCModel{});
var (data1, data2, data3, data4, data5, data6, data7) = _testRepository.SqlProcedureDataSetQuery<T1, T2, T3, T4, T5, T6, T7>("存储过程名", new PROCModel{});
var (data1, data2, data3, data4, data5, data6, data7, data8) = _testRepository.SqlProcedureDataSetQuery<T1, T2, T3, T4, T5, T6, T7, T8>("存储过程名", new PROCModel{});

DataTable

sql 查询并返回 DataTable(不推荐)

var dataTable = _testRepository.SqlQuery(@"select * from A", params);

存储过程执行返回 DataTable(不推荐)

var dataTable = _testRepository.SqlProcedureQuery("存储过程名", new PROCModel{});

DataTable 转成 List<T>(推荐) 👈

var list = _testRepository.SqlQuery<A>(@"select * from A", params);

对象转 SqlParameters

// 支持匿名类
var procModel = new { Name = "Monk", Age = 27 };
var sqlParameters = procModel.ToSqlParameters();

// 支持强类型
var procModel = new PROCModel{ Name = "Monk", Age = 27 };
var sqlParameters = procModel.ToSqlParameters();

最后更新于