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里去就可以了,如果有错就回滚,在这谢谢各位啊。
展开
 我来答
爱茶酱无尘事
2009-07-22 · TA获得超过2885个赞
知道小有建树答主
回答量:1745
采纳率:0%
帮助的人:928万
展开全部
楼主
首先不能用sql中的事务去处理 因为它都把所有的数据都删除了 然后 用的datatable填充的表 所以事务就不管用了
我是这么想的 在这个类里面呢 我们定义一个DataSet类型的属性 然后当我们在执行删除的时候呢 把数据库中的2个表查出来 存放在DataSet对象中 然后当我们更新时候出异常的话 再执行下删除数据库中所有表 然后把DataSet中原来查出的内容 放回数据库
就相当于 自己写的事务
就是执行更新表的时候 设置一个变量 然后判断变量是否是更新成功了 如果成功就没事 如果失败 就相当于回滚 只需要在更新出异常的catch里加个条件变量就可以了

不明白再问吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kid83
2009-07-22 · TA获得超过2081个赞
知道大有可为答主
回答量:1818
采纳率:0%
帮助的人:1995万
展开全部
SqlConnection connection = new SqlConnection();
using(SqlTransaction tran = connection.BeginTransaction())
{
if(更新第一个表成功 && 更新第二个表成功)
{
transaction.Commit();
}
else
{
transaction.Rollback();
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vuVW1P
2009-07-22 · TA获得超过512个赞
知道答主
回答量:133
采纳率:0%
帮助的人:73.9万
展开全部
把所有sql语句放到一个字符串中(可以用;隔开)
try
{
//提交 Commit()
}
catch(Exception ex)
{
//回滚Rollback()
MessageBox.Show(ex.Message);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
微软专家张海
2009-07-22 · TA获得超过748个赞
知道小有建树答主
回答量:564
采纳率:100%
帮助的人:0
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式