visual basic(vb.net)中如何通过启用事务操作同一服务器上的不同SQLserver数据库

第1部分:应用场景

华仔在接口开发的过程中,

遇到一个难点,就是客户另一个供应商将数据传输过来,

但是这个需要我在数据库一种插入完成后,

还需要再另一个数据库插入数据,

但是如果只是简单的增加,

这样操作如果在向第二个数据库插入数据的时候发生报错,

这样就将导致数据的不完整,再次插入需要手动删除第一个数据库插入的数据,

非常不便,于是突发奇想,

看看能不能在两个数据库之间启用事务?

第2部分:解决方案

经过华仔的测试,其实还真可以实现,下面且听我道来

首先,我们构造一个执行sql语句的通用方法:

rem Cn为链接,strCmdText 为sql语句 ,tran 为事务
Public Function ExecuteNonQuery(ByVal Cn As SqlConnection, ByVal strCmdText As String, ByVal tran As SqlClient.SqlTransaction) As Integer
        Try
            If strCmdText = "" Then Return Nothing
            Dim objSqlCommand As New SqlCommand(strCmdText)
            objSqlCommand.Connection = Cn
            objSqlCommand.Transaction = tran
            Dim value = objSqlCommand.ExecuteNonQuery()
            Try
                If Not objSqlCommand Is Nothing Then objSqlCommand.Dispose()
            Catch ex As Exception
            End Try
            Return value
        Catch ex As Exception
            Throw ex
        End Try
End Function

这里我就随意点,不过不希望大家如此哈,后续我会将我的sql通用过程分享给大家!

然后,就是调用尝试了,代码如下:

注意:这里要操作的两个数据库,分别是 dg01 和 dg02 ,

这两个数据库,我只做了一个表(测试事务)和一个字段(sky),并且将skey字段设置了主键,

下面这段代码,将可以完成在两个数据库正确插入数据

Imports System.Data.SqlClient
Imports System.Configuration
Public Class Form1
    rem 将在两个数据库的  测试事务  数据表插入相同的内容“你好1”
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tran As SqlTransaction = Nothing
        Try
            Dim sql As String
            sql = "insert into 测试事务(skey) values ('你好1')"
            ConnStr = "server=192.168.15.1;Uid=sa;Pwd=;dataBase=dg01;Timeout=1800;"
            Dim mySqlConnection As SqlConnection
            mySqlConnection = New SqlConnection(ConnStr)
            mySqlConnection.Open()
            tran = mySqlConnection.BeginTransaction
            ExecuteNonQuery(mySqlConnection, sql, tran)
            sql = "insert into dg02.dbo.测试事务(skey) values ('你好1')"
            ExecuteNonQuery(mySqlConnection, sql, tran)
            tran.Commit() '提交事务
            mySqlConnection.Close()
        Catch ex As Exception
            If Not tran Is Nothing Then tran.Rollback()
            MsgBox(ex.Message.ToString + ex.StackTrace)
        End Try
    End Sub
End Class

而下面这段代码,将在向dg02插入的时候报错,然后事务回滚,两个数据库都没有数据

Imports System.Data.SqlClient
Imports System.Configuration
Public Class Form1
    rem 将在两个数据库的  测试事务  数据表插入相同的内容“你好1”
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim tran As SqlTransaction = Nothing
        Try
            Dim sql As String
            sql = "insert into 测试事务(skey) values ('你好2')"
            ConnStr = "server=192.168.15.1;Uid=sa;Pwd=;dataBase=dg01;Timeout=1800;"
            Dim mySqlConnection As SqlConnection
            mySqlConnection = New SqlConnection(ConnStr)
            mySqlConnection.Open()
            tran = mySqlConnection.BeginTransaction
            ExecuteNonQuery(mySqlConnection, sql, tran)
            sql = "insert into dg02.dbo.测试事务(skey) values ('你好2')"
            sql += "insert into dg02.dbo.测试事务(skey) values ('你好2')"
            ExecuteNonQuery(mySqlConnection, sql, tran)
            tran.Commit() '提交事务
            mySqlConnection.Close()
        Catch ex As Exception
            If Not tran Is Nothing Then tran.Rollback()
            MsgBox(ex.Message.ToString + ex.StackTrace)
        End Try
    End Sub
End Class

第3部分:结论

自此,我们可以清楚的知道,同时操作同一服务器的不同数据库是可以实现的

而且,不仅可以实现同时增删改查,还可以用事务进行操作

这对于我们需要操作不同的数据库来说就非常方便了

 

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容