事务问题,请高手指点 解答出,高分送你 ( 积分: 200 )

  • 主题发起人 主题发起人 刘一飞
  • 开始时间 开始时间

刘一飞

Unregistered / Unconfirmed
GUEST, unregistred user!
System.Data.OleDb.OleDbTransaction tranction=connection.begin
Transaction();
OleDbCommand command=connection.CreateCommand();
command.Transaction=tranction;
try
{
int i;
for(i=0;i<listdata.Tables["emptypakge"].Rows.Count;i++)
{
//进行数据INSERT
。。。。。。。。。
command.Prepare();
command.ExecuteNonQuery();
}
//update 操作
。。。。。。
command.Prepare();
command.ExecuteNonQuery();
command.Transaction.Commit();
}
catch(Exception EE)
{
tranction.Rollback();
}
问题:
1)循环第一次,没有问题,当循环第二次到 进行数据INSERT 的command.ExecuteNonQuery()的时候发生异常
2)假如我把程序改成如下所表示:
try
{
int i;
for(i=0;i<listdata.Tables["emptypakge"].Rows.Count;i++)
{
try
{
System.Data.OleDb.OleDbTransaction tranction=connection.begin
Transaction();
OleDbCommand command=connection.CreateCommand();
command.Transaction=tranction;
//进行数据INSERT
。。。。。。。。。
command.Prepare();
command.ExecuteNonQuery();
//update 操作
。。。。。。
command.Prepare();
command.ExecuteNonQuery();
command.Transaction.Commit();
}
catch(Exception EE)
{
tranction.Rollback();
}
}
不会发生异常。
3)第一种能整单保证数据的完整性,但是第二种不是我希望的,因为当前条数据提交成功,而后来的一条数据提交发生异常,不能能把前几条回滚掉
4)希望各位高手前辈多多指点
 
System.Data.OleDb.OleDbTransaction tranction=connection.begin
Transaction();
OleDbCommand command=connection.CreateCommand();
command.Transaction=tranction;
try
{
int i;
for(i=0;i<listdata.Tables["emptypakge"].Rows.Count;i++)
{
//进行数据INSERT
。。。。。。。。。
command.Prepare();
command.ExecuteNonQuery();
}
//update 操作
。。。。。。
command.Prepare();
command.ExecuteNonQuery();
command.Transaction.Commit();
}
catch(Exception EE)
{
tranction.Rollback();
}
问题:
1)循环第一次,没有问题,当循环第二次到 进行数据INSERT 的command.ExecuteNonQuery()的时候发生异常
2)假如我把程序改成如下所表示:
try
{
int i;
for(i=0;i<listdata.Tables["emptypakge"].Rows.Count;i++)
{
try
{
System.Data.OleDb.OleDbTransaction tranction=connection.begin
Transaction();
OleDbCommand command=connection.CreateCommand();
command.Transaction=tranction;
//进行数据INSERT
。。。。。。。。。
command.Prepare();
command.ExecuteNonQuery();
//update 操作
。。。。。。
command.Prepare();
command.ExecuteNonQuery();
command.Transaction.Commit();
}
catch(Exception EE)
{
tranction.Rollback();
}
}
不会发生异常。
3)第一种能整单保证数据的完整性,但是第二种不是我希望的,因为当前条数据提交成功,而后来的一条数据提交发生异常,不能能把前几条回滚掉
4)希望各位高手前辈多多指点
 
我不知道你做什么?我不大懂C#
现把command.Close以下?如何
如果要完整可以使用触发器啊,把修改的部分进行触发如何。为了保证完整,应该写两个TRY-CATCH,都进行录入判断。
 
C#没用过,但是应该有个提交事务的地方吧。比如
tranction.Commit();
 
接受答案了.
 
后退
顶部