2013-03-18 16 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

相關問題