李怎么说 李怎么说 2025年04月12日 20:00 广东
在C#中,操作数据库有多种方式可供选择。在早期,开发者通常使用ADO.NET这种原生方式来与数据库进行交互。然而,这种方式要求编写大量的SQL语句,并且随着项目复杂度的增加,代码的维护难度也随之提升。为了应对这些问题,诸如SqlSugar等ORM(对象关系映射)框架应运而生,它们通过映射数据库表到对象模型,极大地简化了数据库操作。
尽管如此,在某些场景下,原生的DataTable对象仍然具有其独特的优势。以笔者所经历的项目为例,该系统涉及POS机器、后端服务以及用友系统三个部分的集成。在查询后端数据库时,如果直接返回自定义对象,虽然符合面向对象的设计原则,但实现过程相对繁琐。特别是当需要将查询结果直接绑定到如DataGridView这样的控件时,由于DataGridView的dataSource属性原生支持DataTable,因此使用DataTable能够显著减少开发工作量。
值得庆幸的是,SqlSugar框架不仅提供了便捷的ORM功能,还支持执行原生SQL查询,并能够直接将查询结果返回为DataTable对象。这一特性使得开发者在享受ORM带来的便利的同时,也能在需要时灵活利用DataTable的优势,从而更加高效地完成数据库操作任务。
代码实现如下:
public async Task<AdminUiCallBack> GetReceiveData(string ccustomerid)
{
string sql = $"SELECT p.paymentId as FPayID,p.BankNo,pm.name as FPay,pm.name as FPayName,'' as FExplanation, sum(p.changeAmount) as FAmount,1 as FChecked FROM corecmsorderpay p join corecmspayments pm on pm.id=p.paymentId where p.ccustomerid='{ccustomerid}' group by paymentId ";
///DbClient是SqlSugarClient对象,在这里我使用了依赖注入的方式注入,省略了一些代码
/// SqlSugar 操作数据库并且返回DataTable对象
System.Data.DataTable dt = DbClient.Ado.GetDataTable(sql);
return new AdminUiCallBack()
{
code = 0,
data = dt
};
}