Gewusst wie: Abrufen den ID-Wert beim Einfügen von Datensätzen in Access-Datenbank mit Visual Basic .NET

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 815629 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Zusammenfassung

Dieser Artikel beschreibt wie den Identität Spaltenwert aus einer Access-Datenbank abgerufen werden.

Abrufen des Wertes Identität aus einer Jet-Datenbank unterscheidet sich von der SQL Server, da eine Jet-Datenbank mit mehreren Anweisungen Batchbefehle nicht unterstützt. Der Jet OLE DB-Version 4.0 Provider die Abfrage SELECT @@ IDENTITY unterstützt ermöglicht, den Wert des Feldes automatisch inkrementierte abrufen, die auf Ihre Verbindung generiert wird. Zum Ausführen der Abfrage SELECT @@ IDENTITY wird empfohlen, dass Sie einen anderen OleDbCommand -Objekt verwenden. Dieser Artikel beschreibt eine zweite OleDbCommand verwenden, um den Wert der IDENTITY-Spalte abzurufen.

Hinweis: Dieses Feature funktioniert nur mit Microsoft Jet OLE DB 4.0-Datenbanken. Früheren Versionen von Microsoft Jet OLEDB-unterstützen dieses Feature nicht.

Weitere Informationen

Verbindung mit der Access-Datenbank

Verbindung mit der Access-Datenbank und eine Tabelle mit der IDENTITY-Spalte erstellen, gehen Sie folgendermaßen vor:
  1. Starten Sie Microsoft Visual Studio .NET 2002.
  2. Zeigen im Menü Datei auf neu , und klicken Sie dann auf Projekt .
  3. Klicken Sie unter Projekttypen auf Visual Basic-Projekte . Klicken Sie unter Bereich Vorlagen auf Konsolenanwendung . Module1.vb wird standardmäßig erstellt.
  4. Nennen Sie das Projekt MyJetApplication , und klicken Sie dann auf OK .
  5. Ersetzen Sie den vorhandenen Code durch folgenden Code:
    Imports System
    Imports System.Data
    Imports System.Data.OleDb
    
    Module Module1
    
       Sub Main()
    
          ' Open Connection 
          Dim cnJetDB As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourAccessDatabase")
          cnJetDB.Open()
    
          ' If the test table does not exist, create the Table.
          Dim strSQL As String
          strSQL = "CREATE TABLE AutoIncrementTest " & _
                   "(ID int identity, Description varchar(40), " & _
                   "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"
    
          ' Command for creating Table.
          Dim cmdJetDB As New OleDbCommand(strSQL, cnJetDB)
          cmdJetDB.ExecuteNonQuery()
    
          ' Create a DataAdaptor With Insert Command For inserting records
          Dim oleDa As New OleDbDataAdapter("Select * from AutoIncrementTest", cnJetDB)
    
    
          ' Command to Insert Records.
          Dim cmdInsert As New OleDbCommand()
          cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"
          cmdInsert.Connection = cnJetDB
          cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))
          oleDa.InsertCommand = cmdInsert
    
          ' Create a DataTable
          Dim dtTest As New DataTable()
          oleDa.Fill(dtTest)
    
          Dim drTest As DataRow
    
          ' Add Rows to the Table
          drTest = dtTest.NewRow
          drTest("Description") = "This is a Test Row 1"
          dtTest.Rows.Add(drTest)
    
          drTest = dtTest.NewRow
          drTest("Description") = "This is a Test Row 2"
          dtTest.Rows.Add(drTest)
          
       End Sub
    
    End Module
    
  6. Ändern Sie den Namen der Datenquelle in der Verbindungszeichenfolge, um zu Ihrer Access-Datenbank verweisen.




Auffangen von Identity-Spaltenwert

Die Schritte in das RowUpdated -Ereignis des DataAdapter, zusammenfassen können Sie den Spaltenwert Identität Überfüllen, der für eine Spalte einer Tabelle in einer Access-Datenbank generiert wird. In das RowUpdated -Ereignis Sie werden die SELECT @@ IDENTITY -Abfrage ausführen, indem ein anderes Befehlsobjekt und weisen dann den Wert, der an die Identitätsspalte von der Abfrage zurückgegeben wird. Schließlich rufen Sie die AcceptChanges -Methode des DataRow -Objekts den Wert in der Spalte annehmen.

Gehen Sie das Trapping der Spaltenwert Identität:
  1. Fügen Sie folgenden Code vor der Main -Methode zum Erstellen eines zweiten OleDbCommand -Objekts für die Abfrage SELECT @@ IDENTITY :
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. Hängen Sie den folgenden Code an die Main -Methode zum Erstellen einer neuen Instanz der OleDbCommand -Klasse:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. Hängen Sie den folgenden Code an die Main -Methode für die Behandlung RowUpdated -Ereignisses:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Fügen Sie den folgenden Code an die Main -Methode zum Aktualisieren der Daten. Das RowUpdated -Ereignis wird nach dem Aufrufen der Update -Methode ausgelöst.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. Hängen Sie den folgenden Code an die Methode Main , um die AutoIncrementTest -Tabelle gelöscht und die Ressourcen freizugeben:
          ' Drop the table
          cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest"
          cmdJetDB.ExecuteNonQuery()
    
          ' Release the resources.
          cmdGetIdentity.Dispose()
          cmdGetIdentity = Nothing
          cmdInsert.Dispose()
          cmdInsert = Nothing
          cmdJetDB.Dispose()
          cmdJetDB = Nothing
          cnJetDB.Close()
          cnJetDB.Dispose()
          cnJetDB = Nothing
  6. Fügen Sie den folgenden RowUpdated -Ereignis Ereignishandlercode hinzu Module1:
       ' Event handler for RowUpdated event.
       Private Sub HandleRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)
          If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
             ' Get the Identity column value
             e.Row("ID") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
             Debug.WriteLine(e.Row("ID"))
             e.Row.AcceptChanges()
          End If
       End Sub
    
  7. Klicken Sie im Debug auf Starten , um die Anwendung auszuführen. Identität Spaltenwerte werden im Ausgabefenster angezeigt.


Vollständige Codeauflistung

Imports System
Imports System.Data
Imports System.Data.OleDb

Module Module1

   ' Create OleDbCommand for SELECT @@IDENTITY statement
   Private cmdGetIdentity As OleDbCommand

   Sub Main()

      ' Open Connection 
      Dim cnJetDB As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourAccessDatabase")
      cnJetDB.Open()

      ' If the test table does not exist then create the Table
      Dim strSQL As String
      strSQL = "CREATE TABLE AutoIncrementTest " & _
               "(ID int identity, Description varchar(40), " & _
               "CONSTRAINT AutoIncrementTest_PrimaryKey PRIMARY KEY (ID))"

      ' Command for Creating Table
      Dim cmdJetDB As New OleDbCommand(strSQL, cnJetDB)
      cmdJetDB.ExecuteNonQuery()

      ' Create a DataAdaptor With Insert Command For inserting records
      Dim oleDa As New OleDbDataAdapter("Select * from AutoIncrementTest", cnJetDB)


      ' Command to Insert Records
      Dim cmdInsert As New OleDbCommand()
      cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"
      cmdInsert.Connection = cnJetDB
      cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))
      oleDa.InsertCommand = cmdInsert

      ' Create a DataTable
      Dim dtTest As New DataTable()
      oleDa.Fill(dtTest)

      Dim drTest As DataRow

      ' Add Rows to the Table
      drTest = dtTest.NewRow
      drTest("Description") = "This is a Test Row 1"
      dtTest.Rows.Add(drTest)

      drTest = dtTest.NewRow
      drTest("Description") = "This is a Test Row 2"
      dtTest.Rows.Add(drTest)

      ' Create another Command to get IDENTITY Value
      cmdGetIdentity = New OleDbCommand()
      cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
      cmdGetIdentity.Connection = cnJetDB

      ' Delegate for Handling RowUpdated event
      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated

      ' Update the Data
      oleDa.Update(dtTest)

      ' Drop the table
      cmdJetDB.CommandText = "DROP TABLE AutoIncrementTest"
      cmdJetDB.ExecuteNonQuery()

      ' Release the Resources
      cmdGetIdentity.Dispose()
      cmdGetIdentity = Nothing
      cmdInsert.Dispose()
      cmdInsert = Nothing
      cmdJetDB.Dispose()
      cmdJetDB = Nothing
      cnJetDB.Close()
      cnJetDB.Dispose()
      cnJetDB = Nothing
   End Sub

   ' Event Handler for RowUpdated Event
   Private Sub HandleRowUpdated(ByVal sender As Object, ByVal e As OleDbRowUpdatedEventArgs)
      If e.Status = UpdateStatus.Continue AndAlso e.StatementType = StatementType.Insert Then
         ' Get the Identity column value
         e.Row("ID") = Int32.Parse(cmdGetIdentity.ExecuteScalar().ToString())
         Debug.WriteLine(e.Row("ID"))
         e.Row.AcceptChanges()
      End If
   End Sub
End Module

Informationsquellen

Weitere Informationen zu einem verwandten Thema in Visual Basic 6.0 finden Sie die folgende KB-Artikelnummer:
232144INFO: Jet OLE DB Provider Version 4.0 unterstützt @@ Identity SELECT
Weitere Informationen der folgenden MSDN-Website:
OleDbDataAdapter.RowUpdated-Ereignis
http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter.rowupdated(vs.71).aspx

Eigenschaften

Artikel-ID: 815629 - Geändert am: Samstag, 12. Mai 2007 - Version: 3.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft ADO.NET 1.0
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Keywords: 
kbmt kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster KB815629 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 815629
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com