多表更新问题

时间:2020-12-09 20:41:46
数据库是 SQL SERVER
现在假设有两个表 表1 和 表2

我先用DataAdapter1 和DataAdapter2 分别将表1 和表2填充到dataTable1 和dataTable2 中, 然后进行了更新操作,现在要将结果保存回数据库中

现在请教: 怎样能实现如果其中一表保存失败时将操作回滚, 既要么两个表都更新成功,要么其中一个表保存失败时两个表都不进行更新.

如有方法,请给个VB.NET的示例代码.


8 个解决方案

#1


可以参考一下:
Dim connStr As String = "连接数据库语句"
        Dim con As New SqlConnection(connStr)
        con.Open()
        Dim com As New SqlCommand()
        Dim myTrans As SqlTransaction
        myTrans = con.BeginTransaction()
        com.Connection = con
        com.Transaction = myTrans
        Try           
                com.CommandText = "更新1的SQL语句"
                com.ExecuteNonQuery()
                com.CommandText = "更新2的SQL语句"
                com.ExecuteNonQuery()
            Next
            myTrans.Commit()
            MsgBox("成功!")
        Catch ex As Exception
            myTrans.Rollback()
            MsgBox("失败!")
        Finally
            con.Close()
        End Try

#2


不好意思多了一个Next,去掉就可以了.

#3


同意一楼。

#4


或者用DataRelation对象

#5


谢谢,不过还有点不是很明白

表1 和 表2 都是一次要更新多条记录,有的情况可能要一次更新50条或更多条的记录,
这种情况是不是要把50条记录的更新语句都赋值给SqlCommand的CommandText属性?
SqlCommand的CommandText属性有长度限制吗?

或者我要更新CommandText属性50次,分别执行吗?


另我接触.Net时间不长,请具体说一下 DataRelation的用法,最好有例子可以吗?

#6


是不是用两个DataTable对象和DataAdapter不能实现我的目的呢?

#7


可以考虑采用存储过程。
这样比较方便。

#8


长度没限制
多次更新,可以用For循环

#1


可以参考一下:
Dim connStr As String = "连接数据库语句"
        Dim con As New SqlConnection(connStr)
        con.Open()
        Dim com As New SqlCommand()
        Dim myTrans As SqlTransaction
        myTrans = con.BeginTransaction()
        com.Connection = con
        com.Transaction = myTrans
        Try           
                com.CommandText = "更新1的SQL语句"
                com.ExecuteNonQuery()
                com.CommandText = "更新2的SQL语句"
                com.ExecuteNonQuery()
            Next
            myTrans.Commit()
            MsgBox("成功!")
        Catch ex As Exception
            myTrans.Rollback()
            MsgBox("失败!")
        Finally
            con.Close()
        End Try

#2


不好意思多了一个Next,去掉就可以了.

#3


同意一楼。

#4


或者用DataRelation对象

#5


谢谢,不过还有点不是很明白

表1 和 表2 都是一次要更新多条记录,有的情况可能要一次更新50条或更多条的记录,
这种情况是不是要把50条记录的更新语句都赋值给SqlCommand的CommandText属性?
SqlCommand的CommandText属性有长度限制吗?

或者我要更新CommandText属性50次,分别执行吗?


另我接触.Net时间不长,请具体说一下 DataRelation的用法,最好有例子可以吗?

#6


是不是用两个DataTable对象和DataAdapter不能实现我的目的呢?

#7


可以考虑采用存储过程。
这样比较方便。

#8


长度没限制
多次更新,可以用For循环