vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Re: Eine DB Transaktion in 2 Methoden verwenden 
Autor: ModeratorFZelle (Moderator)
Datum: 16.01.13 11:20

Das ist eine etwas unglücklich gewählte Herangehensweise.

1. Du scheinst eine Globale Connection zu haben, das ist nicht günstig.
2. Der Datenzugriff gehört dann auch in diese Klasse
3. Und dann kannst du einfach Funktionen wie BeginTransaction, Commit und Rollback mit implementieren.


Du solltest auch mal über die Namen nachdenken, deine Namenskonvention ist seit mehr als 10 Jahren out.
http://msdn.microsoft.com/en-us/library/xzf533w0(v=vs.71).aspx
http://msdn.microsoft.com/en-us/library/vstudio/ms229002(v=vs.100).aspx

Das gilt auch für die DB, das es eine Tabelle ist weist du doch eh, warum also tbl_xyz?

So ein DAL könnte so etwa aussehen ( in 10 Min zusammengeschrieben, nicht getestet )
Imports System.Data.SqlClient
Imports System.Collections.Generic
 
Public Class Database
    Implements IDisposable
 
    Private _Connection As SqlConnection
    Private _Transaction As SqlTransaction
 
    Public Shared Property ConnectionString As String
 
    Public Shared Function Open(ByVal withTransaction As Boolean) As Database
        Dim database As New Database(withTransaction)
        Return database
    End Function
    Public Sub New(ByVal withTransaction As Boolean)
        If (withTransaction) Then
            GetConnection()
            BeginTransaction()
        End If
    End Sub
 
    Public Function GenerateParameter(name As String, value As Object) As _
      KeyValuePair(Of String, Object)
        Return New KeyValuePair(Of String, Object)(name, value)
    End Function
    Public Sub Close()
        If (_Transaction IsNot Nothing) Then
            _Transaction.Dispose()
            _Transaction = Nothing
        End If
        If (_Connection IsNot Nothing) Then
            _Connection.Dispose()
            _Connection = Nothing
        End If
    End Sub
    Protected Function GetConnection() As SqlConnection
        If (_Connection IsNot Nothing) Then
            Return _Connection
        Else
            _Connection = New SqlConnection(ConnectionString)
            _Connection.Open()
        End If
        Return _Connection
    End Function
    Public Sub BeginTransaction()
        If (_Connection IsNot Nothing) Then
            _Transaction = _Connection.BeginTransaction()
        Else
            Throw New InvalidOperationException("No open Connection")
        End If
    End Sub
    Public Sub Rollback()
        If (_Transaction IsNot Nothing) Then
            _Transaction.Rollback()
        Else
            Throw New InvalidOperationException("No open Transaction")
        End If
    End Sub
    Public Sub Commit()
        If (_Transaction IsNot Nothing) Then
            _Transaction.Commit()
        Else
            Throw New InvalidOperationException("No open Transaction")
        End If
    End Sub
 
    Public Function ExecuteNonQuery(sql As String, ByVal ParamArray para() As _
      KeyValuePair(Of String, Object)) As Int32
        Dim con As SqlConnection = GetConnection()
        Dim cmd As SqlCommand = con.CreateCommand()
        cmd.CommandText = sql
        For Each parameter As KeyValuePair(Of String, Object) In para
            cmd.Parameters.AddWithValue(parameter.Key, parameter.Value)
        Next
        Return cmd.ExecuteNonQuery()
    End Function
    Public Function ExecuteScalar(sql As String, ByVal ParamArray para() As _
      KeyValuePair(Of String, Object)) As Object
        Dim con As SqlConnection = GetConnection()
        Dim cmd As SqlCommand = con.CreateCommand()
        cmd.CommandText = sql
        For Each parameter As KeyValuePair(Of String, Object) In para
            cmd.Parameters.AddWithValue(parameter.Key, parameter.Value)
        Next
        Return cmd.ExecuteScalar()
    End Function
#Region "IDisposable Support"
    Private disposedValue As Boolean ' So ermitteln Sie überflüssige Aufrufe
 
    ' IDisposable
    Protected Overridable Sub Dispose(disposing As Boolean)
        If Not Me.disposedValue Then
            If disposing Then
                If (_Transaction IsNot Nothing) Then
                    _Transaction.Dispose()
                End If
                If (_Connection IsNot Nothing) Then
                    _Connection.Dispose()
                End If
            End If
        End If
        Me.disposedValue = True
    End Sub
    ' Dieser Code wird von Visual Basic hinzugefügt, um das Dispose-Muster 
    ' richtig zu implementieren.
    Public Sub Dispose() Implements IDisposable.Dispose
        ' Ändern Sie diesen Code nicht. Fügen Sie oben in Dispose(ByVal 
        ' disposing As Boolean) Bereinigungscode ein.
        Dispose(True)
        GC.SuppressFinalize(Me)
    End Sub
#End Region
 
End Class
Und benutzen würde man das so
Public Class Businesslogic
    Protected Sub CreateLogin(database As Database, userId As Integer)
        database.ExecuteNonQuery("Insert Into Login (UserID, ....) Values (" & _
          "@UserID,....)", _
                                 database.GenerateParameter("@userID", userId))
    End Sub
    Protected Sub CreateUser(database As Database, firstName As String)
        database.ExecuteNonQuery("Insert Into [User] (FirstName, ....) Values (" & _
          "@FirstName,....)", _
                                 database.GenerateParameter("@FirstName", _
                                 firstName))
    End Sub
    Public Sub CreateUserWithLogin(userID As Integer, FirstName As String)
        Using database As New Database(True)
            CreateLogin(database, userID)
            CreateUser(database, FirstName)
            database.Commit()
        End Using
    End Sub
End Class
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Eine DB Transaktion in 2 Methoden verwenden4.475Matthias198115.01.13 09:49
Re: Eine DB Transaktion in 2 Methoden verwenden3.585ModeratorFZelle15.01.13 11:56
Re: Eine DB Transaktion in 2 Methoden verwenden3.563Matthias198115.01.13 21:11
Re: Eine DB Transaktion in 2 Methoden verwenden3.653ModeratorFZelle16.01.13 11:20
Re: Eine DB Transaktion in 2 Methoden verwenden3.628Matthias198116.01.13 20:57
Re: Eine DB Transaktion in 2 Methoden verwenden3.645Matthias198116.01.13 21:15
Re: Eine DB Transaktion in 2 Methoden verwenden3.542ModeratorFZelle16.01.13 23:22
Re: Eine DB Transaktion in 2 Methoden verwenden3.538Matthias198117.01.13 21:25

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel