数据库操作的抽象类
编号 | 方法 | 描述 | 返回值 | 参数 |
1 | Add | 实现添加功能。 | void | DT类 |
2 | AddPlus | 实现带逻辑的添加功能。(例如:判断记录是否已经存在) | void | DT类 |
3 | Edit | 实现编辑功能。 | void | DT类 |
4 | EditPlus | 实现带逻辑的编辑功能。 | void | DT类 |
5 | Delete | 实现删除功能。 | void | DT类 |
6 | Get | 取得一条记录。 | BaseDT | DT类 |
7 | GetAllList | 取得所有记录。 | DataTable | DT类 |
8 | GetAllListView | 取得所有记录的视图数据。 | DataTable | DT类 |
9 | GetDataSource | 取得单选框之类的数据源。 | DataTable | DT类 |
10 | IsExist | 判断记录是否已经存在。(为添加) | bool | DT类 |
11 | IsExistForEdit | 判断记录是否已经存在。(为编辑) | bool | DT类 |
12 | GetValue | 取得一个值。 | object | DT类,字段名 |
13 | (事件)OperEvent | 添加/编辑中的其他操作 | void | DT类 |
14 | GetList | 取得数据列表(带条件) | DataTable | DT类 |
15 | (属性)ErrorText | 错误信息 | string | |
16 | ClearErrorText | 清除错误信息 | void | |
17 | (属性)IsError | 判断是否有错误信息提出。 | bool | |
18 | IsExist | 判断符合某个条件的记录是否存在 | bool |
sql对象 |
19 | (虚函数)GetBaseSQL | 根据对象类型生成IBaseSQLable对象。 | IBaseSQLable |
DT对象 |
20 | GetListSQL | 取得带条件SQL语句 | string | |
21 | ErrorType | 常用的错误提示信息。 | class | |
22 | (属性)IsUsingTrans | 是否使用事务。 | bool | |
23 | (事件)OperLastEvent | 完成添加后的操作。 | void | DT对象 |
24 | (事件)OperEventTrans | 添加/编辑中的其他操作 | void | DT对象,数据库操作对象 |
25 | (事件)OperLastEventTrans | 完成添加后的操作。 | void | DT对象,数据库操作对象 |
26 | (属性)IsUsingExist | 是否判断有相同的记录存在。(默认值:tru) | bool | |
AddPlus的流程:
/// <summary>
/// 实现带逻辑的添加功能。
/// </summary>
/// <param name="detail"></param>
public void AddPlus(DT detail)
{
// 清除错误信息
ClearErrorText();
// 判断记录是否存在
if (IIsUsingExist && IsExist(detail))
{
// 错误信息 ("Add_Exist")
ErrorText = ErrorType.Add_Exist;
return;
}
// 如果应用事务
if (IsUsingTrans)
{
// 实现事务处理
AddPlusStepTrans(detail);
}
// 如果不应用事务
else
{
// 实现无事务处理
AddPlusStep(detail);
}
}
/// <summary>
/// 无事务处理时的实现。
/// </summary>
/// <param name="detail"></param>
private void AddPlusStep(DT detail)
{
// 清除错误信息
ClearErrorText();
if (OperEvent != null)
{
// 执行其他操作
OperEvent(detail);
// 如果出现错误
if (IsError)
{
return;
}
}
Add(detail);
// 后续方法
if (OperLastEvent != null)
{
OperLastEvent(detail);
}
}
/// <summary>
/// 事务处理时的实现。
/// </summary>
/// <param name="detail"></param>
private void AddPlusStepTrans(DT detail)
{
// 清除错误信息
ClearErrorText();
bool selfTran = false;
//事务处理
if (curDBOperater.baseTransaction == null)
{
curDBOperater.BeginTran();
selfTran = true;
}
try
{
if (OperEventTrans != null)
{
// 执行其他操作
OperEventTrans(detail, curDBOperater);
// 如果出现错误
if (IsError)
{
// 回滚事务
curDBOperater.RollBackTran();
return;
}
}
Add(detail);
// 后续方法
if (OperLastEventTrans != null)
{
OperLastEventTrans(detail, curDBOperater);
// 如果出现错误
if (IsError)
{
// 回滚事务
curDBOperater.RollBackTran();
return;
}
}
// 提交事务
if ( selfTran )
{
curDBOperater.CommitTran();
}
}
catch(Exception ex)
{
// 回滚事务
curDBOperater.RollBackTran();
throw ex;
}
finally
{
if ( selfTran )
{
curDBOperater.baseTransaction.Dispose();
}
}
}
我忘记了几个地方:
1:事务的应用。
2:添加成功后的后续方法。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构