业务逻辑中的交易范围

时间:2015-08-19 03:19:26

标签: vb.net data-access-layer transactionscope business-logic

Public Class BusinessLogic
    Public Sub SaveTables
    Dim daDataAccess As New DataAccess.DataAccess

        Using scope As New TransactionScope()
            daDataAccess.SaveTable1(DataSet)  
            daDataAccess.SaveTable2(DataSet)  
                   .
                   .
            daDataAccess.SaveTableN(DataSet)  
        End using
    End Sub
End Class

Public Class DataAccess
    Public Sub SaveTable1(ByVal drTable As DataRow)
        'sql command
        Dim CMD As New SqlCommand("spSaveTable1")
        CMD.Connection = connect()
        CMD.CommandType = CommandType.StoredProcedure

        'add parameters in stored procedure
        CMD.Parameters.Add("Field1", SqlDbType.NVarChar, 10).Value = drTable("Field1")

        'execute stored procedure
        CMD.ExecuteNonQuery()
    End Sub

    Public Sub SaveTable2(ByVal drTable As DataRow)
        'sql command
        Dim CMD As New SqlCommand("spSaveTable2")
        CMD.Connection = connect()
        CMD.CommandType = CommandType.StoredProcedure

        'add parameters in stored procedure
        CMD.Parameters.Add("Field1", SqlDbType.NVarChar, 10).Value = drTable("Field1")

        'execute stored procedure
        CMD.ExecuteNonQuery()
    End Sub
End Class

几个问题:

  1. 在数据访问类中定义连接的理想位置是什么?全球到班级或每个程序?

  2. 我可以在不传递连接的情况下使用事务范围吗?如果我不这样做(通过连接),不管我对第一个问题做了什么,要么连接关闭,要么我得到DTC设置错误。我相信我不需要它(DTC),因为我只访问数据访问组件中所有程序的1个数据库。

  3. 拜托,请帮忙。如果我通过连接,我将不得不在业务逻辑组件中初始化它,我认为这不是一个好的做法。

    我只是简化了代码以便了解我的观点,但至少可以说业务逻辑非常复杂。它是某种工资单的批处理过程。

    对我来说最理想的是在业务逻辑中使用事务范围,同时保持与数据访问层的连接。

    谢谢。

0 个答案:

没有答案