Sql 事务未回滚-范围问题?
我很难理解为什么我不能让这笔交易回滚。我有一个DataAccess对象来处理连接/事务。我有一个MailingData业务对象和一个MailingDataAccess对象,它从MailingData对象获取DataAccess对象byRef并执行一个存储过程。我立即回滚更新,但它不会回滚。我猜这是一个范围问题。帮助我用dataaccess做byval,但那不起作用,所以我改为byref vb.net控制台应用程序- 代码: 我的数据访问对象:Sql 事务未回滚-范围问题?,sql,vb.net,transactions,scope,rollback,Sql,Vb.net,Transactions,Scope,Rollback,我很难理解为什么我不能让这笔交易回滚。我有一个DataAccess对象来处理连接/事务。我有一个MailingData业务对象和一个MailingDataAccess对象,它从MailingData对象获取DataAccess对象byRef并执行一个存储过程。我立即回滚更新,但它不会回滚。我猜这是一个范围问题。帮助我用dataaccess做byval,但那不起作用,所以我改为byref vb.net控制台应用程序- 代码: 我的数据访问对象: Private _database As D
Private _database As Database
Private _transaction As Data.IDbTransaction
Private _connection As Data.IDbConnection
Public ReadOnly Property Database() As Database
Get
Return _database
End Get
End Property
Public ReadOnly Property Connection() As IDbConnection
Get
Return _connection
End Get
End Property
Public ReadOnly Property Transaction() As Data.IDbTransaction
Get
Return _transaction
End Get
End Property
Public Sub New()
_database = GetDatabase()
End Sub
Public Sub New(ByVal database As String)
_database = GetDatabase(database)
End Sub
Private Function GetDatabase() As Database
Return DatabaseFactory.CreateDatabase()
End Function
Private Function GetDatabase(ByVal database As String) As Database
Return DatabaseFactory.CreateDatabase(database)
End Function
'-- if not transaction started, start new one.
Public Sub StartTransaction()
If _transaction Is Nothing Then
_connection = _database.CreateConnection()
_connection.Open()
_transaction = _connection.BeginTransaction
End If
End Sub
Public Sub CommitTransaction()
_transaction.Commit()
If Not IsNothing(Connection) Then
Connection.Close()
End If
End Sub
Public Sub RollBackTransaction()
_transaction.Rollback()
If Not IsNothing(Connection) Then
Connection.Close()
End If
End Sub
End Class
mailingData.UpdateCategorize在mailingData业务对象中定义为:
Public Function UpdateCategorize(ByRef da As DataAccess) As Integer
Dim mailingDA As New MailingDataAccess
Return mailingDA.UpdateCategorize(da, Me)
End Function
MailingDataAccess.UpdateCategorize定义为:
Public Function UpdateCategorize(ByRef da As DataAccess, ByVal clsMailing As MailingData) As Integer
Dim db As Database = da.Database
Dim DbCommand As DbCommand
Dim dbStatus As Integer = 0
DbCommand = da.Database.GetStoredProcCommand("proc_UpdateCategorize")
With db
.AddInParameter(DbCommand, "@pMailingID", Data.DbType.Int32, clsMailing.MailingID)
dbStatus = db.ExecuteNonQuery(DbCommand)
Return dbStatus
End Function
我想出来了,这句话:
dbStatus = db.ExecuteNonQuery(DbCommand)
应该是:
dbStatus = db.ExecuteNonQuery(DbCommand, da.Transaction)
@Steve,因为他使用的是ExecuteOnQuery,我想是MSSQLServer2008。。实体框架Woorkbah!企业库,而不是实体框架。。。我今天到处都是我编辑了你的标题。请看,如果一致意见为“否”,则不应这样做。您的存储过程中是否有任何事务控制?
dbStatus = db.ExecuteNonQuery(DbCommand, da.Transaction)