【发布时间】:2015-03-27 07:10:06
【问题描述】:
我使用这样的环境事务:
using(TransactionScope tran = new TransactionScope()) {
CallAMethod1();//INSERT
CallAMethod2();//INSERT
tran.Complete();
}
方法CallAMethod2(); 返回affected rows =-264
所以它无法插入,但是第一个插入已经提交!
我想知道如何使用ambient transaction,如果第二种方法有多个需要内部事务的操作,我应该将这些操作放在内部事务中吗?
像这样:
DAL_Helper.Begin_Transaction();
//------Fill newKeysDictioanry
affectedRow = DBUtilities.InsertEntityWithTrans("table2", newKeysDictioanry, DAL_Helper);
if (affectedRow == 1)
{
if (!string.IsNullOrEmpty(sp_confirm))
{
result_dt = UserTransactionDAL.Run_PostConfirm_SP(sp_PostConfirm, OBJ.ValuesKey, DAL_Helper);
if (result_dt.Rows.Count > 0 && result_dt.Rows[0][0].ToString() == "0")
{
DAL_Helper.current_trans.Commit();
if (DAL_Helper.connectionState == ConnectionState.Open)
{
DAL_Helper.Close_Connection();
}
return 1;// affectedRow;
}
else
{
DAL_Helper.current_trans.Rollback();
if (DAL_Helper.connectionState == ConnectionState.Open)
{
DAL_Helper.Close_Connection();
}
return -2;
}
}
//etc
【问题讨论】:
-
你知道数据库是不是用事务创建的吗? Informix (Dynamic Server) 支持不带事务的未记录数据库,以及带事务的记录、缓冲记录和 MODE ANSI。错误 -264 无法写入临时文件;我不知道这是否表明运行数据库服务器的机器有问题。
-
@JonathanLeffler:不知道,为什么第二次插入操作无故没有成功时事务没有回滚
-
使用 (varambientTxn = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled)){...}
标签: c# asp.net transactions informix transactionscope