C#+SQL的事务回滚

来源:百度知道 编辑:UC知道 时间:2024/06/23 05:38:15
我有2个方法,一个是runSql(string sqltest)另一个是SaveDt(DataTable dt),现在我本地客户端有2个表,我想把我这2个表覆盖SQL里的2个表,步骤是:1用runSql(string sqltest)方法传入一条sql语句把SQL里的数据全删除,然后用 SaveDt(DataTable dt)方法把本地的数据更新到这个表去,问题就是:当我用runSql删除成功,然后更新的时候失败的话,SQL里的数据删除了但是新的数据没插上去,或者是第一个表更新成功但是第二个表没成功,那么这个问题怎么解决啊?
靖子青春:你的意思我明白,这样是可以的,我这里说的2个表只是一个例如而已,如果2个表的话你的方法是没有问题的,其实我这里真正有二十几个表,如果按照你的这种做法的话,内存将会很大速度慢了很多,我按照1楼专家的提示用TransactionScope这个类做出来了,这样只要把我删除和更新的方法放到TransactionScope里去就可以了,如果有错就回滚,在这谢谢各位啊。

用事务
http://msdn.microsoft.com/zh-cn/library/system.transactions.transactionscope(VS.85).aspx

楼主
首先不能用sql中的事务去处理 因为它都把所有的数据都删除了 然后 用的datatable填充的表 所以事务就不管用了
我是这么想的 在这个类里面呢 我们定义一个DataSet类型的属性 然后当我们在执行删除的时候呢 把数据库中的2个表查出来 存放在DataSet对象中 然后当我们更新时候出异常的话 再执行下删除数据库中所有表 然后把DataSet中原来查出的内容 放回数据库
就相当于 自己写的事务
就是执行更新表的时候 设置一个变量 然后判断变量是否是更新成功了 如果成功就没事 如果失败 就相当于回滚 只需要在更新出异常的catch里加个条件变量就可以了

不明白再问吧

SqlConnection connection = new SqlConnection();
using(SqlTransaction tran = connection.BeginTransaction())
{
if(更新第一个表成功 && 更新第二个表成功)
{
transaction.Commit();
}
else
{
transaction.Rollback();
}
}

把所有sql语句放到一个字符串中(可以用;隔开)
try
{
//提交 Commit()
}
catch(Exception ex)
{
//回滚Ro