使用三层开发时,两个连续的添加,如果第二个出现错误,如何使第一个回滚呢?
mainFeeDAL1.Add(mianFee1);//如果这条命令成功添加
chuandaiFeeDAL1.Add(chuandaiFee1);//但是这条命令出现了错误
如何使第一条回滚呢?
21 个解决方案
#1
第二次添加与第二次添加纳入同一事务.
#2
1.
把2个sql写在一个事务里面
2.
第2条出错就把第一条记录删除。。呵呵
把2个sql写在一个事务里面
2.
第2条出错就把第一条记录删除。。呵呵
#3
开启事务
#4
具体代码呢
#5
你可以写成Sql的存储过程啊
在其中用Sql的事物
在其中用Sql的事物
#6
事务 回复内容太短了!
#7
两个操作添加到同一个事务。。再提交,这样,只有全部正确执行了才会提交成功
#8
两种方式:
1.使用存储过程,在里面使用事务。
2.使用ADO.net事务处理机制。
1.使用存储过程,在里面使用事务。
2.使用ADO.net事务处理机制。
#9
事务处理,
三层的话,在BLL层开启事物进行处理。
简单点话,用存储过程里的事务吧
#10
这个似乎稍难点,在存储过程中做好点
#11
用事务啊。
#12
无非是事务二字。
try
{
cmd.CommandText = "";//插入信息1
cmd.ExecuteNonQuery();
cmd.CommandText = "";//插入信息2
cmd.ExecuteNonQuery();
tran.Commit();
MessageBox.Show("事务提交成功!");
}
catch(Exception ex)
{
tran.Rollback();
MessageBox.Show("Error!"+ex.Message);
}
}
#13
up up
#14
事务 事务事务
#15
加入事务、错了自己回滚。
#16
单条的我的知道如何做
问题是三层开发中 业务逻辑层 需要同时对多个表进行插入
应该如何进行事物的操作呢
问题是三层开发中 业务逻辑层 需要同时对多个表进行插入
应该如何进行事物的操作呢
#17
反正大家都那样说了
我也吼一句..
事务..
我也吼一句..
事务..
#18
DAL层 调用存储过程
#19
//建议增加一个事务层,并从现有DAL层增加若干方法,返回SqlList
public bool ExecuteCommand(ArrayList SqlList)
{
DbConnection con = CreateConnection();
con.Open();
bool iserror = false;
string strerror = "";
DbTransaction SqlTran = con.BeginTransaction();
try
{
for (int i = 0; i < SqlList.Count; i++)
{
DbCommand _command = GetDbProviderFactory().CreateCommand();
_command.Connection = con;
_command.CommandTimeout = 500;
_command.CommandText = SqlList[i].ToString();
_command.Transaction = SqlTran;
_command.ExecuteNonQuery();
_command.Dispose();
}
}
catch (Exception ex)
{
iserror = true;
strerror = ex.Message;
}
finally
{
if (iserror)
{
SqlTran.Rollback();
throw new Exception(strerror);
}
else
{
SqlTran.Commit();
}
con.Close();
}
if (iserror)
{
return false;
}
else
{
return true;
}
}
public int ExecuteCommand(ArrayList SqlList, List<System.Data.Common.DbParameter[]> paramlist)
{
DbConnection con = CreateConnection();
con.Open();
bool iserror = false;
string strerror = "";
int count = 0;
DbTransaction SqlTran = con.BeginTransaction();
string s = "";
try
{
for (int i = 0; i < SqlList.Count; i++)
{
DbCommand _command = GetDbProviderFactory().CreateCommand();
_command.Connection = con;
_command.CommandTimeout = 500;
_command.CommandText = SqlList[i].ToString();
s = SqlList[i].ToString();
for (int n = 0; n < paramlist[i].Length; n++)
{
DbParameter p = paramlist[i][n];
if (p.Value == null || p.Value.ToString() == "")
{
p.Value = DBNull.Value;
}
_command.Parameters.Add(p);
}
_command.Transaction = SqlTran;
count += _command.ExecuteNonQuery();
_command.Dispose();
}
}
catch (Exception ex)
{
iserror = true;
strerror = ex.Message;
count = 0;
}
finally
{
if (iserror)
{
SqlTran.Rollback();
throw new Exception(strerror);
}
else
{
SqlTran.Commit();
}
con.Close();
}
return count;
}
#20
路过,瞧瞧...
#21
事务~ 学习了
#1
第二次添加与第二次添加纳入同一事务.
#2
1.
把2个sql写在一个事务里面
2.
第2条出错就把第一条记录删除。。呵呵
把2个sql写在一个事务里面
2.
第2条出错就把第一条记录删除。。呵呵
#3
开启事务
#4
具体代码呢
#5
你可以写成Sql的存储过程啊
在其中用Sql的事物
在其中用Sql的事物
#6
事务 回复内容太短了!
#7
两个操作添加到同一个事务。。再提交,这样,只有全部正确执行了才会提交成功
#8
两种方式:
1.使用存储过程,在里面使用事务。
2.使用ADO.net事务处理机制。
1.使用存储过程,在里面使用事务。
2.使用ADO.net事务处理机制。
#9
事务处理,
三层的话,在BLL层开启事物进行处理。
简单点话,用存储过程里的事务吧
#10
这个似乎稍难点,在存储过程中做好点
#11
用事务啊。
#12
无非是事务二字。
try
{
cmd.CommandText = "";//插入信息1
cmd.ExecuteNonQuery();
cmd.CommandText = "";//插入信息2
cmd.ExecuteNonQuery();
tran.Commit();
MessageBox.Show("事务提交成功!");
}
catch(Exception ex)
{
tran.Rollback();
MessageBox.Show("Error!"+ex.Message);
}
}
#13
up up
#14
事务 事务事务
#15
加入事务、错了自己回滚。
#16
单条的我的知道如何做
问题是三层开发中 业务逻辑层 需要同时对多个表进行插入
应该如何进行事物的操作呢
问题是三层开发中 业务逻辑层 需要同时对多个表进行插入
应该如何进行事物的操作呢
#17
反正大家都那样说了
我也吼一句..
事务..
我也吼一句..
事务..
#18
DAL层 调用存储过程
#19
//建议增加一个事务层,并从现有DAL层增加若干方法,返回SqlList
public bool ExecuteCommand(ArrayList SqlList)
{
DbConnection con = CreateConnection();
con.Open();
bool iserror = false;
string strerror = "";
DbTransaction SqlTran = con.BeginTransaction();
try
{
for (int i = 0; i < SqlList.Count; i++)
{
DbCommand _command = GetDbProviderFactory().CreateCommand();
_command.Connection = con;
_command.CommandTimeout = 500;
_command.CommandText = SqlList[i].ToString();
_command.Transaction = SqlTran;
_command.ExecuteNonQuery();
_command.Dispose();
}
}
catch (Exception ex)
{
iserror = true;
strerror = ex.Message;
}
finally
{
if (iserror)
{
SqlTran.Rollback();
throw new Exception(strerror);
}
else
{
SqlTran.Commit();
}
con.Close();
}
if (iserror)
{
return false;
}
else
{
return true;
}
}
public int ExecuteCommand(ArrayList SqlList, List<System.Data.Common.DbParameter[]> paramlist)
{
DbConnection con = CreateConnection();
con.Open();
bool iserror = false;
string strerror = "";
int count = 0;
DbTransaction SqlTran = con.BeginTransaction();
string s = "";
try
{
for (int i = 0; i < SqlList.Count; i++)
{
DbCommand _command = GetDbProviderFactory().CreateCommand();
_command.Connection = con;
_command.CommandTimeout = 500;
_command.CommandText = SqlList[i].ToString();
s = SqlList[i].ToString();
for (int n = 0; n < paramlist[i].Length; n++)
{
DbParameter p = paramlist[i][n];
if (p.Value == null || p.Value.ToString() == "")
{
p.Value = DBNull.Value;
}
_command.Parameters.Add(p);
}
_command.Transaction = SqlTran;
count += _command.ExecuteNonQuery();
_command.Dispose();
}
}
catch (Exception ex)
{
iserror = true;
strerror = ex.Message;
count = 0;
}
finally
{
if (iserror)
{
SqlTran.Rollback();
throw new Exception(strerror);
}
else
{
SqlTran.Commit();
}
con.Close();
}
return count;
}
#20
路过,瞧瞧...
#21
事务~ 学习了