Oledb事务回滚

钱德拉塞卡

新成员
已加入
2016年7月3日
留言内容
1
编程经验
3-5
在这个论坛上大家好


我正在开发一个cusom应用程序,该应用程序使用MS ACESS数据库(MSOFFICE 2007)作为后端并使用c#.net(与VISUAL STUDIO 2010一起使用)。


让我简要说明我的问题。
我正在尝试在应用程序中使用交易。我在数据库中有几个表,并使用VS Designer创建数据表和tableadapters。
我遇到的情况是,在遇到特定情况时需要更新多个表。因此,我使用事务来正确存储数据。
在下面的伪代码中解释了执行此任务的那部分代码,并提供了相关说明。


由于我不熟悉交易,因此无法弄清我正在犯的错误。我在互联网上搜索了多个论坛,但找不到明确的解决方案。


如果经验丰富的论坛成员可以指出我的错误并提供解决方案,那将对您有极大的帮助。


在此先感谢所有耐心阅读此长信息的成员。


我希望我能清楚地描述我的问题。如果有人需要任何其他解释,我可以给需要的人。请邮寄给 [email protected] 主题为"C#中的OLEDBTRANSACTION回滚"以获得任何进一步的解释。

预先感谢您的解决方案
致以诚挚的问候
钱德拉塞卡
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- ----------------------
{
//创建交易
尝试
{​
//数据库是MS-ACCESS 2007 mdb数据库****************
/所有***** adp对象都是设计器生成的Tableadapters
OleDbConnection mycon = codadp.Getconnection(); .....


如果(mycon.State == ConnectionState.Closed)mycon.Open();
mytrans = mycon.BeginTransaction();
//对所有TableTable适配器的命令对象进行事务处理。 将创建这些适配器的部分类,并将此方法添加到所有必需的表适配器中
codadp.AttachConnAndTrans(mytrans);
itmadp.AttachConnAndTrans(mytrans);
maincostadp.AttachConnAndTrans(mytrans);
mainstkadp.AttachConnAndTrans(mytrans);
seccostadp.AttachConnAndTrans(mytrans);
secstkadp.AttachConnAndTrans(mytrans);



ITEMRow nrow = itmtab.NewITEMRow();
..........填满数据行
itmtab.Rows.Add(nrow);
MainCostRow mcrow = maincosttab.NewMainCostRow();
MainStockRow msrow = mainstktab.NewMainStockRow();
SecondaryCostRow scrow = seccosttab.NewSecondaryCostRow();
SecondaryStockRow ssrow = secstktab.NewSecondaryStockRow();
.........填充数据行
itmadp.Update(nrow);
maincosttab.Rows.Add(mcrow);
maincostadp.Update(mcrow);
mainstktab.Rows.Add(msrow); ..... 该表需要一个字段,该字段的“必需”属性设置为“是”,但新创建的行中未提供该字段……因此更新此表将引发异常。
mainstkadp.Update(msrow);


seccosttab.Rows.Add(scrow);
seccostadp.Update(scrow);

secstktab.Rows.Add(ssrow);
secstkadp.Update(ssrow);
//一切正常后再提交
mytrans.Commit();​
}
抓住(前例外)
{
MessageBox.Show("交易不完整:" + ex.Message);//.... THIS MSG WAS DISPLAYED WHILE RUNNING THE APPLICATION , BUT PREVIOUS ROW UPDATES WERE NOT ROLLED BACK...........
尝试
{
mytrans.Rollback();​
}
捕获(异常ex1)
{
MessageBox.Show(" failed rollback. " + ex1.Message);// ......只需知道在此处引发的异常,但在运行该应用程序时未引发异常
}​

}​
}
****************************************************** **********************************************
样本**************** AttachConnAndTrans(mytrans)来连接连接和事务对象。
公共无效的AttachConnAndTrans(OleDbTransaction tran)
{


this.Adapter.DeleteCommand.Connection = tran.Connection;
this.Adapter.DeleteCommand.Transaction = tran;
this.Adapter.InsertCommand.Connection = tran.Connection;
this.Adapter.InsertCommand.Transaction = tran;
this.Adapter.SelectCommand.Connection = tran.Connection;
this.Adapter.SelectCommand.Transaction = tran;
this.Adapter.UpdateCommand.Connection = tran.Connection;
this.Adapter.UpdateCommand.Transaction = tran;
foreach(this.CommandCollection中的OleDbCommand cmd)
{
cmd.Connection = tran.Connection;
cmd.Transaction = tran;
}
}
}







****************************************************** ******************************************
 
最佳 底部