2013-03-18 67 views
0

在我的Web应用程序中发生此错误。错误 - 事务要么不与当前连接关联,要么已完成

交易或者不与当前连接关联或已完成。

#Region "Database Queries" 
Private Shared oSqlConnection As SqlConnection 
Private Shared oSqlDataAdapter As SqlDataAdapter 
Private Shared oSqlCommand As SqlCommand 
Private Shared oSqlTransaction As SqlTransaction 

Private Shared _strCommand As String 

Public Shared Property strCommand() As String 
    Get 
     Return _strCommand 
    End Get 

    Set(ByVal value As String) 
     If Not InTransaction Then RollBack_Transaction() 
     _strCommand = "SET DATEFORMAT mdy " & vbCrLf & value 
     DbQuery() 
    End Set 
End Property 

Protected Shared Sub DbQuery() 
    'Try 

    If Not InTransaction Then 
     RollBack_Transaction() 

     oSqlCommand = New SqlCommand(_strCommand, oSqlConnection) 
    Else 
     oSqlCommand = oSqlConnection.CreateCommand 
     If _InTransaction_Initial Then 
      oSqlConnection.Open() 
      oSqlTransaction = oSqlConnection.BeginTransaction(IsolationLevel.ReadCommitted) 
      _InTransaction_Initial = False 
     End If 

     oSqlCommand.Transaction = oSqlTransaction 
     oSqlCommand.CommandText = _strCommand 
     oSqlCommand.CommandTimeout = 0 
    End If 

    oSqlDataAdapter = New SqlDataAdapter(oSqlCommand) 
    Ds = New DataSet 
    oSqlDataAdapter.Fill(Ds) '**<- - - The error occurs here**' 

    'Catch ex As Exception 
    ' SetMessage(ex) 
    ' ' MsgBox("Server: " & ServerName & vbCrLf & "User Id: " & SqlID & vbCrLf & "Password: " & SqlPassword & vbCrLf & "Database: " & MainDb) 
    'End Try 

    'oSqlConnection.Close() 

End Sub 

Private Shared _InTransaction_Initial As Boolean = False 
Private Shared InTransaction As Boolean 

Public Shared Sub StartTransaction() 
    _InTransaction_Initial = True 
    InTransaction = True 
End Sub 
Public Shared Sub RollBack_Transaction() 
    Try 
     oSqlTransaction.Rollback() 
    Catch ex As Exception 
    End Try 
    Try 
     oSqlConnection.Close() 
    Catch ex As Exception 
    End Try 

    InTransaction = False 
End Sub 

Public Shared Sub Commit_Transaction() 
    Try 
     oSqlTransaction.Commit() 
    Catch ex As Exception 
    End Try 
    Try 
     oSqlConnection.Close() 
    Catch ex As Exception 
    End Try 

    InTransaction = False 
End Sub 

Function dsCount() As Long 
    Return Ds.Tables(0).Rows.Count 
End Function 

请参阅代码中的粗体文本。

希望听到你的积极回应。

的问候,发生

+0

嗨Heydari,你是什么意思不使该方法静态? – 2013-03-19 10:18:58

回答

1

它的错误,因为你已经使用共享成员变量

您可以使用共享函数,但您应该避免使用共享变量或成员。
不要在共享上下文中“保存”任何信息。这些在应用范围内可用,并且对于来自不同用户的不同请求可能是相同的。

在共享(静态)函数中运行数据访问操作应该不成问题。
但具有共享成员会导致完整性和并发问题使得应用不稳定

将这些作为变量inside方法

oSqlConnection As SqlConnection 
oSqlDataAdapter As SqlDataAdapter 
oSqlCommand As SqlCommand 
oSqlTransaction As SqlTransaction 

将解决这个问题。

+0

嗨Heydari,谢谢你。我将所有私有/公共共享替换为Public/Private子或函数,并添加oSqlConnection.CreateCommand()。并且所有共享变量被替换为** DIM **。如果我会遇到除此之外的任何错误,我会通知您。非常感谢。 – 2013-03-21 10:53:44

相关问题