vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 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
Autwert eines neu hinzugefügten Datensatzes ausgeben (threadsicher) 
Autor: IIIIIChrisIIIII
Datum: 22.05.07 12:02

Hallo!
Nach dem ich nun schon seit mehreren Stunden im Internet nach diesem Problem gegoogelt habe und auch dieses Forum bis zum erbrechen durchforstet habe (leider ohne Erfolg), hab ich mich entschlossen einen neuen Betrag zu schreiben:

Ich weiß, dass das was ich frage so ähnlich schon beantwortet in diesem Forum zu finden ist, allerdings ist es nur ähnlich.

Ich möchte in eine Tablle einer Access (*.mdb)-Datenbank eine neue Zeile einfügen und den AutoWert der neuen Zeile auslesen.
Das mache ich so:

Dim cmd As New OleDb.OleDbCommand("INSERT INTO `person` (`vorname`, `name`," & _
  "`alter`, `gender`) " & _
                                           "VALUES ('Bimbo3', 'Limbo', '180'," & _
                                           "'m');", DBConnection)
        cmd.ExecuteNonQuery()
 
        cmd.CommandText = "SELECT @@IDENTITY;"
        Console.WriteLine("Zeile hinzugefügt: " & cmd.ExecuteScalar.ToString)
Das funktioniert soweit auch ganz gut. Das Problem ist nur, dass mehrere Threads parallel die Zeilen einfügen und zwischen dem Einfügen der Zeile und dem Abfragen des AutoWerts eine neue Zeile durch einen anderen Thread hinzugefügt werden kann, so dass ich dann bei der Abfrage einen falschen Wert erhalte.
Soweit ich richtig informiert bin gibt es auch nicht die Möglichkeit eine Transaktion bei Access - Datenbanken durchzuführen.
Ich weiß, dass man es so lösen kann:

Dim CMD As New OleDb.OleDbCommand()
        CMD.Connection = DBConnection
        CMD.Transaction = DBConnection.BeginTransaction
 
 
        CMD.CommandText = "INSERT INTO `person` (`vorname`, `name`, `alter`," & _
          "`gender`) " & _
                                   "VALUES ('Bimbo3', 'Limbo', '180'," & _
                                   "'zwitter');"
        CMD.ExecuteNonQuery()
 
 
 
        CMD.CommandText = "SELECT @@IDENTITY" '"SELECT MAX(`id`) FROM `person`;"
        Dim InsertID As Object = CMD.ExecuteScalar()
 
        CMD.Transaction.Commit()
        Console.WriteLine("Datensatz hinzugefügt mit ID " & CInt(InsertID))
Das Problem hierbei ist allerdings, dass falls dann zwischen dem Einfügen einer neuen Zeile und dem Auslesen des AutoWerts ein anderer Thread versucht eine Zeile hinzuzufügen, es zu einer Exception kommt.
Daher meine Frage, wie löst man mein Vorhaben am Besten?

Mal wieder vielen Dank für jede Hilfe!
Gruß,
Chris
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Autwert eines neu hinzugefügten Datensatzes ausgeben (thread...1.310IIIIIChrisIIIII22.05.07 12:02
Re: Autwert eines neu hinzugefügten Datensatzes ausgeben (th...811ModeratorFZelle22.05.07 15:05
Re: Autwert eines neu hinzugefügten Datensatzes ausgeben (th...756IIIIIChrisIIIII22.05.07 17:21

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