c#事务处理。。。。。

wu345654 2008-11-12 07:05:35
我用winfrom开发一个程序,其中有几个事件必须是连续执行的,如果一个事件执行不成功,那么就全部回滚,且sql的存储过程没办法实现,因为其中的参数太多,循环条件复杂,请问还有其他更好的方式来解决吗。。谢谢
...全文
198 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wu345654 2008-11-13
  • 打赏
  • 举报
回复
謝謝你的回答,但是我想問問有方法可以直接在form的.cs文件里控制裡面所寫的方法來做事務處理嗎??、

比如,其中一個方法處理失敗,其他幾個都回滾。。。。


我的程序都是分層架構的,用你的方法不知道怎么實現才好。對數據的操作都是獨立開了的。。對數據的操作只需要調用數據處理的方法,然後傳值。。而且這邊的操作很多都是通過循環對數據庫插入或則修改數據的。


由於系統是繁體的系統,所以只能打繁體字,不好意思啊。麻煩幫忙一下
liuziran 2008-11-13
  • 打赏
  • 举报
回复
.net没有提供你需要的这种事务处理

需要麻烦一点,为每一个方法再写一个逆向方法。 类似于redo/undo操作
brallow 2008-11-12
  • 打赏
  • 举报
回复
忘记说明你所想要的^


int k = scu.ExecuteNonQuery();
这里你可以写任意多的SQL操作,比如你可以:
int k = scu.ExecuteNonQuery();
int k = scu.ExecuteNonQuery();
int k = scu.ExecuteNonQuery();
执行3次,然后再提交事务,有任何一个失败(产生异常)都会导致回滚。
brallow 2008-11-12
  • 打赏
  • 举报
回复
上面的例子可能有几个地方需要解释一下:
ConnectionPool[0]这是我自己的一个连接池,ConnectionPool[0]得到一个SqlConnection对象;
ConnectionPool[0].BeginTransaction();得到的自然就是SqlTransaction对象。注意var是C# 3.0的关键字,这是隐式类型推断。

后面的
var scu = new SqlCommand(sql, ConnectionPool[0]) { Transaction = st }
也是相同的理解,得到一个SqlCommand对象,后面的是{ Transaction = st }相当于:
var scu = new SqlCommand(sql,ConnectionPool[0]);
scu.Transaction = st;


brallow 2008-11-12
  • 打赏
  • 举报
回复
有什么问题?直接使用事务啊?

var st = ConnectionPool[0].BeginTransaction();
using (var scu = new SqlCommand(sql, ConnectionPool[0]) { Transaction = st })
{
try
{
int k = scu.ExecuteNonQuery();
st.Commit();
return k;
}
catch
{
st.Rollback();
throw;
}
}

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧