我的这个系统是用的三层架构,BLL层,DLL层,Model层。连接数据库及对数据库的操作我在DLL层里的sqlhelper.cs这个文件里,我现在在做一个客户资料的页面,客户资料有两个表存储,一个是客户的信息,一个是联系人的信息(因为一个客户要求有多个联系人,所以我分两个表保存信息),在页面上上半部分是填写客户信息的,下部分我用的是table方式填写联系人信息的(用JS控制添加一行或删除一行来实现添加一个联系人或删除一个联系人),还有一个“保存”的按钮,保存的时候我想用事务处理,这样在存入数据库中出现问题好回滚数据,保持数据库中的数据的正确性,可是我不知道这个事务处理怎么写,请大家帮忙。
解决方案 »
- 小问题,sql查询
- 写到数据库里后,中文全是乱码.
- 求C#做的远程桌面例子,内详!奖100分+RMB100元
- 帮我看看这些代码是不是用C#写的,如果不是,是用什么语言写的?
- 如何在三层中通用一个函数模块??DAL层如何连接数据库啊..
- 还有一个按钮,请问我在按钮事件中怎么写呀
- 我想在一个按钮事件中打开一个新的ie窗口,怎么办?
- 被准备语句 '(@LineNo int,@TrackNo int,@DepthBeg real,@DepthEnd real,@DepthFi' 需要参数 @LineNo,但未提供该参数。
- 随机数问题
- 运行使用了ReportViewer控件的winform窗体出现本地报表处理期间出错
- C# 串口通信问题:
- 业务单据保存到SQL 数据库表中
{
代码
}
在dal中声明一个属性来包装DbTransaction,
bll中得到.用事务的方法传同一个DbTransaction
using(IDbTransaction tran=CreateTransaction())
{
Method1(tran);
Method2(tran);
tran.Commit();
}
@TermId int
as
begin transaction
declare @errorSum int
set @errorSum=0
update table set ?=?
update table set ?=?
set @errorSum=@errorSum+@@error
if @errorSum>0
begin
rollback transaction
end
else
begin
commit transaction
end调用存储过程。上边写在存储过程里。
public void Execute(string commandString)
{
SqlTransaction transaction = connection.BeginTransaction("SaveData");
try
{
ExecuteCommand(commandString, transaction);
transaction.Commit();
}
catch(Exception e)
{
transaction.Rollback();
throw e;
}
} private void ExecuteCommand(string commandString, SqlTransaction transaction)
{
if(commandString != null)
{
SqlCommand command=new SqlCommand(commandString);
command.Connection = connection;
command.Transaction = transaction;
command.ExecuteNonQuery();
}
}
/// <summary>
/// 在一个事务中执行一组任务
/// </summary>
/// <param name="dataAccesses">一组任务</param>
/// <returns>成功返回 true ; 否则 false</returns>
public static bool BatchExecuteNonQuery(params DataAccess[] dataAccesses)
{
bool Success = false;
DbConnection connection = dataAccesses[0].Connection; if (connection.State != ConnectionState.Open)
connection.Open(); DbTransaction trans = connection.BeginTransaction(IsolationLevel.ReadCommitted); try
{
foreach (DataAccess dataAccess in dataAccesses)
{
dataAccess.Command.Connection = connection;
dataAccess.Command.Transaction = trans; dataAccess.Command.ExecuteNonQuery();
} trans.Commit();
Success = true;
}
catch (Exception e)
{
trans.Rollback();
throw e;
}
finally
{
dataAccesses[0].Connection.Close();
} return Success;
}
代码你相应的改一下就好了。
我 r 都一个月了
你就是 花 5秒钟 google一下 也出来了啊存储过程事务
这样灵活怎么写代码,不要问我