我的系统分成了DBU数据操作 DAL 以及BLL
现在问题是是BLL中要实现一个功能,例如
1 向A表插入一条数据
2 更具插入的数据查询B,C中相关字段
3 更具A,B,C相关数据,向D表中插入记录
这是一个业务,问题在于,这个必须在一个事务中实现,在创建DAL时,都是一张表一个类,每个类实现的插入都是一个独立事务,那么我要实现上面的功能,只能直接使用DBU来实现了,但这又违反了BLL不能直接访问DBU的规则
或者直接用DAL来实现,那么又违反DAL是不处理业务的,
这个功能到底应该如何来实现,在那里实现
现在问题是是BLL中要实现一个功能,例如
1 向A表插入一条数据
2 更具插入的数据查询B,C中相关字段
3 更具A,B,C相关数据,向D表中插入记录
这是一个业务,问题在于,这个必须在一个事务中实现,在创建DAL时,都是一张表一个类,每个类实现的插入都是一个独立事务,那么我要实现上面的功能,只能直接使用DBU来实现了,但这又违反了BLL不能直接访问DBU的规则
或者直接用DAL来实现,那么又违反DAL是不处理业务的,
这个功能到底应该如何来实现,在那里实现
解决方案 »
- OpenFileDialog遇到的问题
- using (SqlConnection conn = new SqlConnection(connString)) ?
- Update更新语句问题,求高手,在线等
- 水晶报表能否按条件汇总?
- 怎样才可以实现 数据库突然断开~ 抓住这个异常~~
- 请问C#网络开发
- ◥◣㊣◢◤ 小弟由VB转C#希望各位大家多多指教! ◥◣㊣◢◤
- winform保存视频文件相对路径的问题!!!!求高手指点呀,,,在线等待!!!!
- 怎样读WebForm中DataGrid中模板列中TextBox输入的内容?
- ListView控件的运用,如何显示学生信息,包括姓名、学号、籍贯等?
- C#怎么样将dategridview中的数据导出到word中
- C#类型转换解析
实际上 你插入和更新单个表根本就无需事务。
这个是正解,三层架构事务就应该移到BLL中
BLL启动事物,把当前事物作为参数传给DAL,捕获DAL异常,若有rollback,无Commit或者直接存储过程
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public int OraExeSqlTran(ArrayList SQLStringList)
{
using (OracleConnection conn = new OracleConnection(OraConnStr()))
{
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
OracleTransaction Tran = conn.BeginTransaction();
cmd.Transaction = Tran;
int Exint = -1;
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
try
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
Exint = 1;
}
catch (Exception er)
{
//ErrorRecord(strsql, er);
Exint = 0;
MsgError(er.Message.ToString());
break;
}
}
}
if (Exint == 1)
{
Tran.Commit();
SQLStringList.Clear();
return 1;
}
else
{
Tran.Rollback();
conn.Close();
SQLStringList.Clear();
return 0;
}
}
}