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

2020/07/16 20:15 · VB.NET · 40阅读 · 0评论
阿里云·云小站,新老用户同享,1核2G云服务器低至89元/年,229元/3年;2核4G3M3年639元
摘要:

visual basic(vb.net)中启用事务操作同一服务器上的不同SQLserver数据库的应用场景:华仔在接口开发的过程中,遇到一个难点,就是客户另一个供应商将数据传输过来,但是这个需要我在数据库一种插入完成后,还需要再另一个数据库插入数据,但是如果只是简单的增加,这样操作如果在向第二个数据库插入数据的时候发生报错,这样就将导致数据的不完整,再次插入需要手动删除第一个数据库插入的数据,非常不便,于是突发奇想,看看能不能在两个数据库之间启用事务?

visual basic(vb.net)中启用事务操作同一服务器上的不同SQLserver数据库的应用场景

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

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

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

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

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

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

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

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

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

visual basic(vb.net)中启用事务操作同一服务器上的不同SQLserver数据库的解决方案

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

首先,我们构造一个执行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

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

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

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

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

您可能感兴趣的文章

本文地址:https://www.huazai186.com/post/147.html
文章标签:
版权声明:本文为原创文章,版权归 羽化飞翔 所有,欢迎分享本文,转载请保留出处!

文件下载

上一篇:
下一篇:
腾讯云618云聚惠活动火热进行中,1核2G-288元/3年,2核4G3M-1288元/3年,2核8G5M-1688元/3年,4核8G5M-1999元/3年

 发表评论


表情