Announcement

Collapse
No announcement yet.

INSERT- oder UPDATE-Statement in Transaktion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • INSERT- oder UPDATE-Statement in Transaktion

    Hallo,

    ich bin über das folgende Problem gestolpert, für das ich keine zufriedenstellende Lösung finde. Vielleicht habt ihr ja eine Idee, wie man das bewerkstelligen kann.

    Ich soll ein Programm schreiben, mit dem man irgendwelche Daten auf einem SQL-Server verwalten kann. Dazu gehört normalerweise das Lesen und das Schreiben von Daten. Für den schreibenden Zugriff habe ich mir eine Funktion geschrieben, die beliebige INSERT- oder UPDATE-Statements ausführen und als Rückgabewert die Anzahl der betroffenen Datensätze liefern soll. Die Funktion sieht (bereinigt um die Fehlerbehandlung) so aus:

    Public Function ExecuteCommand(ByVal oCN As SqlConnection, ByVal sQuery As String) As Integer
    Dim oCommand As New SqlCommand
    Dim iResult As Integer

    oCommand.CommandText = sQuery
    oCommand.CommandType = CommandType.Text
    oCommand.Connection = oCN

    iResult = oCommand.ExecuteNonQuery()

    oCommand.Dispose()
    Return m_iResult
    End Function


    Die übergebene Connection oCN ist bereits geöffnet.
    Wenn ich diese Funktion nun innerhalb einer Transaktion aufrufe, bekomme ich die Meldung "ExecuteNonQuery erfordert, dass der Befehl über eine Transaktion verfügt, wenn die dem Befehl zugewiesene Verbindung eine ausstehende lokale Verbindung ist. Die Transaction-Eigenschaft des Befehls wurde nicht initialisiert."
    Wenn ich in diese Funktion nun noch eine Transaktion einbaue, sagt er mir aber wiederum, dass parallele Transaktionen nicht unterstützt werden.
    Die externe Transaktion kann ich auch nicht weglassen, weil der mit dieser Funktion auszuführende INSERT oder UPDATE ja nicht der einzige sein muss, der innerhalb dieser Transaktion laufen soll.
    Wenn ich aus den Daten der übergebenen Connection eine lokale neue Connection erstelle, würde es wahrscheinlich funktionieren, nur benötige ich dafür natürlich das Kennwort des SQL-Benutzers, da dieses ja richtigerweise nicht aus dem Connection-Objekt abrufbar ist. Ich finde es nun aber mehr als unschön, mir dass Kennwort zu merken, um dieses dann bei jedem INSERT oder UPDATE erneut anzugeben (eine neue Eingabe durch den Anwender scheidet erst recht aus).

    Ich stehe zur Zeit echt auf dem Schlauch, wie sich Microsoft das gedacht hat.

    Und bevor es jemand vorschlägt... nein, ich kann nicht mit integrierter SQL-Sicherheit arbeiten, es müssen SQL-Benutzer mit eigenem Kennwort sein.

    Ich hoffe, ihr könnt mir helfen und mir den richtigen Weg weisen. Vielen Dank im Voraus.

  • #2
    Problem gelöst...

    Hallo,

    ich habe nach langem Suchen das Problem (hoffentlich) gelöst. Wenn man die außerhalb der Funktion erzeugte Transaktion als Parameter in die Funktion rein gibt und dort dem Command übergibt, dann wird das Statement auch durchgeführt.

    Comment

    Working...
    X