C#+SQL的事务回滚
我有2个方法,一个是runSql(stringsqltest)另一个是SaveDt(DataTabledt),现在我本地客户端有2个表,我想把我这2个表覆盖SQL里的2个...
我有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里去就可以了,如果有错就回滚,在这谢谢各位啊。 展开
靖子青春:你的意思我明白,这样是可以的,我这里说的2个表只是一个例如而已,如果2个表的话你的方法是没有问题的,其实我这里真正有二十几个表,如果按照你的这种做法的话,内存将会很大速度慢了很多,我按照1楼专家的提示用TransactionScope这个类做出来了,这样只要把我删除和更新的方法放到TransactionScope里去就可以了,如果有错就回滚,在这谢谢各位啊。 展开
4个回答
展开全部
楼主
首先不能用sql中的事务去处理 因为它都把所有的数据都删除了 然后 用的datatable填充的表 所以事务就不管用了
我是这么想的 在这个类里面呢 我们定义一个DataSet类型的属性 然后当我们在执行删除的时候呢 把数据库中的2个表查出来 存放在DataSet对象中 然后当我们更新时候出异常的话 再执行下删除数据库中所有表 然后把DataSet中原来查出的内容 放回数据库
就相当于 自己写的事务
就是执行更新表的时候 设置一个变量 然后判断变量是否是更新成功了 如果成功就没事 如果失败 就相当于回滚 只需要在更新出异常的catch里加个条件变量就可以了
不明白再问吧
首先不能用sql中的事务去处理 因为它都把所有的数据都删除了 然后 用的datatable填充的表 所以事务就不管用了
我是这么想的 在这个类里面呢 我们定义一个DataSet类型的属性 然后当我们在执行删除的时候呢 把数据库中的2个表查出来 存放在DataSet对象中 然后当我们更新时候出异常的话 再执行下删除数据库中所有表 然后把DataSet中原来查出的内容 放回数据库
就相当于 自己写的事务
就是执行更新表的时候 设置一个变量 然后判断变量是否是更新成功了 如果成功就没事 如果失败 就相当于回滚 只需要在更新出异常的catch里加个条件变量就可以了
不明白再问吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
SqlConnection connection = new SqlConnection();
using(SqlTransaction tran = connection.BeginTransaction())
{
if(更新第一个表成功 && 更新第二个表成功)
{
transaction.Commit();
}
else
{
transaction.Rollback();
}
}
using(SqlTransaction tran = connection.BeginTransaction())
{
if(更新第一个表成功 && 更新第二个表成功)
{
transaction.Commit();
}
else
{
transaction.Rollback();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把所有sql语句放到一个字符串中(可以用;隔开)
try
{
//提交 Commit()
}
catch(Exception ex)
{
//回滚Rollback()
MessageBox.Show(ex.Message);
}
try
{
//提交 Commit()
}
catch(Exception ex)
{
//回滚Rollback()
MessageBox.Show(ex.Message);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询