asp.net - SQL事务:TSQL与VB.NET?

标签 asp.net vb.net tsql transactions

我们正在追踪其中一个应用程序中令人讨厌的超时错误。

我想知道在应用程序中使用SQL事务与使用TSQL语句写入存储过程有什么区别(如果有)。我们需要重组存储的proc和vb代码才能使其正常工作,但我不确定目前是否值得这样做。

Public Sub RetrieveTData(ByVal cID As String, ByVal cnn As SqlConnection) As Boolean

    Dim sqlTran As SqlTransaction
    cnn.Open()
    sqlTran = cnn.BeginTransaction

    Try
        If Not DataAlreadyTransferred(cID) Then

            Dim Command As New SqlCommand("usp_BigNasty_CopyDataFromDB1toDB2")
            Command.CommandType = CommandType.StoredProcedure
            Command.Transaction = sqlTran
            Command.Parameters.AddWithValue("@cID", cID)
            Command.Connection = cnn

            Command.ExecuteNonQuery()
            sqlTran.Commit()
        Endif

    Catch ex As Exception
        sqlTran.Rollback()
        Throw
    Finally
        cnn.Close()
    End Try

End Sub

由于try / catch的编写方式,我们不确定超时发生在DataAlreadyTransferred()还是usp_BigNasty_CopyDataFromDB1toDB2中。我们可以重组此代码,但是要花一周左右的时间才能投入生产(今天的测试/开发中没有错误)

DB1-永久存储,也由其他应用程序使用
DB2-工作集,仅由Web App使用
DataAlreadyTransferred(cID)首先检查DB2是否具有记录的任何副本,如果DB2有并且这些记录是干净的,它将删除它们(DB1中的数据可能已更改,我们需要最新的版本)。如果DB2的数据很脏,则将其保留下来,并且不会删除任何数据。
usp_BigNasty_CopyDataFromDB1toDB2从大约20-30个不同的表中复制行,并从perm副本中将其从DB1复制到DB2,从本质上创建了一个Web应用程序可以访问的工作集

我们知道这是低效的,并且正在研究改进它的方法,只是还没有时间...

我相信通过在应用程序代码中进行事务处理,可以锁定比实际需要更多的表。如果我们将它们移至存储的proc,一次将锁定较少的表,从而提高了我们消除今天遇到的死锁条件/超时问题的机会。只是不确定。

感谢您的任何投入。

最佳答案

与往返和多次通话相比,您的交易的开放时间长于所需时间。

我建议使用一个存储的proc来测试,清除和写入=对服务器的一个原子调用。

我还将考虑使用复制来使数据实时保持实时运行,如果DB2包含大量DB1,那么甚至还会进行镜像。让数据库引擎来做吗?

关于asp.net - SQL事务:TSQL与VB.NET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4228213/

相关文章:

vb.net - 如何卸载 VB.NET 中所有打开的表单?

sql-server - MSSQL 2008 R2 : Selecting one duplicate columns once and rest of the columns comma separated

mysql - SQL Server 是否提供类似 MySQL 的 ON DUPLICATE KEY UPDATE 功能

sql-server - SQL 函数中的两个 return 语句是什么意思?

c# - 从 TableAdapter 获取@@IDENTITY

vb.net - 如何在 Visual Basic 2010 中引用带有变量的控件?

c# - 使用数据访问层为 3 层安排 dotnet 核心应用程序

mysql - 将 mysql 查询转换为在 vb.net 中使用

c# - 使用 Asp.net 上传和下载文件

c# - session 错误 :Object not set to an instance