Ophalen de identiteitwaarde tijdens het invoegen van Records in een Access-Database met Visual Basic.NET

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 815629 - Bekijk de producten waarop dit artikel van toepassing is.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Samenvatting

In dit artikel wordt beschreven hoe u halen de identiteit kolomwaarde uit een Access-database.

Het ophalen van de Waarde van de identiteit van een Jet-database afwijkt die van SQL Server omdat een Jet-database een batchopdrachten ondersteunt. De Jet OLE DB versie 4.0 provider ondersteunt deSELECT @@ Identityquery waarmee de waarde van automatische ophoging ophalen het veld dat wordt gegenereerd op uw verbinding. Met deSELECT @@ Identityquery, verdient een andere te gebruikenOleDbCommandobject. In dit artikel wordt beschreven hoe u een tweedeOleDbCommandwaarde van de identiteitskolom ophalen.

Opmerking:Deze functie werkt alleen met Microsoft Jet OLEDB 4.0-databases. Eerdere versies van Microsoft Jet OLEDB ondersteunen dit niet functie.

Meer informatie

Verbinding maken met de Access-Database

Verbinding maken met de Access-Database en maakt u een tabel met de Id-kolom als volgt:
  1. Start Microsoft Visual Studio.NET-2002.
  2. Op deBestandin het menuNieuwe, en klik vervolgens opProject.
  3. OnderProjecttypen, klik opVisuele Basic-projecten. OnderSjablonenopConsoletoepassing. Module1.vb is standaard gemaakt.
  4. Naam van het projectMyJetApplicationen klik vervolgens opOK.
  5. Bestaande code vervangen door de volgende 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. De naam van de gegevensbron in de verbindingsreeks wijzigen Wijs de Access-Database.




Waarde van de identiteitskolom trap

Het samenvatten van de stappen deRowUpdatedgebeurtenis van de DataAdapter kunt u de waarde van de identiteitskolom overlappen die wordt gegenereerd voor een kolom van een tabel in een Access-Database. In deRowUpdatedgebeurtenis, voert u deSELECT @@ IDENTITYmet behulp van een queryOpdrachtobject en vervolgens wordt de waarde die wordt geretourneerd door toewijzen de query de identiteitskolom. Tenslotte roept deAcceptChangesmethode van deDataRowhet object de waarde accepteren.

De val de id-kolom waarde, als volgt:
  1. Voeg de volgende code vóór deHoofdvenstermethode voor het maken van een tweedeOleDbCommandobject voor deSELECT @@ IDENTITYquery:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. Toevoegen van de volgende code in deHoofdvenstermethode voor het maken van een nieuwe instantie vanOleDbCommandklasse:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. Toevoegen van de volgende code in deHoofdvenstermethode voor het verwerken van deRowUpdatedgebeurtenis:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Toevoegen van de volgende code in deHoofdvenstermethode voor het bijwerken van de gegevens. DeRowUpdatedgebeurtenis die optreedt na aanroepen deUpdatemethode.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. Toevoegen van de volgende code in deHoofdvenstermethode neerzetten deAutoIncrementTesttabel en los van de bronnen:
          ' 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. De volgende toevoegenRowUpdatedgebeurtenis-handler code 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. Op deFoutopsporingmenu, klik opStartde toepassing wordt uitgevoerd. Identiteit waarden kolom in het venster Uitvoer weergegeven.


Volledige code

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

Referenties

Voor meer informatie over een in Visual Basic 6.0 verwant onderwerp klikt u op het volgende artikelnummer artikel in de Microsoft Knowledge Base:
232144INFO: Jet OLE DB Provider versie 4.0 Selecteer @@ Identity ondersteunt
Bezoek de volgende MSDN-website voor meer informatie. website:
OleDbDataAdapter.RowUpdated, gebeurtenis
http://msdn2.Microsoft.com/en-us/library/System.Data.OLEDB.OleDbDataAdapter.RowUpdated (vs.71) .aspx

Eigenschappen

Artikel ID: 815629 - Laatste beoordeling: donderdag 3 maart 2011 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Trefwoorden: 
kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:815629

Geef ons feedback

 

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