ΔΙΑΔΙΚΑΣΙΕΣ: Ανάκτηση της τιμής της ταυτότητας κατά την εισαγωγή εγγραφών σε βάση δεδομένων της Access με χρήση της Visual Basic .NET

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 815629 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Αυτό το άρθρο βήμα προς βήμα περιγράφει τον τρόπο για να ανακτήσετε την τιμή της στήλης ιδιοτήτων από μια βάση δεδομένων της Access.

Κατά την ανάκτηση της τιμής της ταυτότητας μιας βάσης δεδομένων Jet είναι διαφορετικό από εκείνο του SQL Server, επειδή μια βάση δεδομένων Jet δεν υποστηρίζει εντολές δέσμης multi-statement. Το Jet OLE DB έκδοση 4.0 η υπηρεσία παροχής υποστηρίζει τηνSELECT @@ Identityερώτημα που σας επιτρέπει να ανακτήσετε την τιμή του πεδίου αυτόματης προσαύξησης που δημιουργείται από τη σύνδεσή σας. Για να εκτελέσετε τοSELECT @@ Identityερώτημα, συνιστάται να χρησιμοποιήσετε άλλοOleDbCommandObject. Αυτό το άρθρο περιγράφει τον τρόπο χρήσης ενός δευτερολέπτουOleDbCommandΓια να ανακτήσετε την τιμή της στήλης ταυτότητας.

ΣΗΜΕΙΩΣΗ:Αυτή η δυνατότητα λειτουργεί μόνο με βάσεις δεδομένων Microsoft Jet OLEDB 4.0. Παλαιότερες εκδόσεις του Microsoft Jet OLEDB δεν υποστηρίζουν αυτήν τη δυνατότητα.

Περισσότερες πληροφορίες

Η σύνδεση με τη βάση δεδομένων της Access

Για να συνδεθείτε με τη βάση δεδομένων της Access και να δημιουργήσετε έναν πίνακα με τη στήλη ταυτότητας, ακολουθήστε τα εξής βήματα:
  1. Ξεκινήστε το Microsoft Visual Studio .NET 2002.
  2. Στο διακομιστήFILEμενού, σημείοΝέα, και στη συνέχεια κάντε κλικ στο κουμπίΤο έργο.
  3. underΤύποι έργουΚάντε κλικΤο οπτικό Βασικό έργα. underΠρότυπαενότητα, κάντε κλικ στο κουμπίΕφαρμογή κονσόλας. Από προεπιλογή, δημιουργείται Module1.vb.
  4. Το όνομα του έργουMyJetApplicationκαι, στη συνέχεια, κάντε κλικ στο κουμπίOk.
  5. Αντικαταστήστε τον υπάρχοντα κωδικό με τον ακόλουθο κώδικα:
    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. Για να τροποποιήσετε το όνομα του αρχείου προέλευσης δεδομένων στη συμβολοσειρά σύνδεσης, ώστε να δείχνει προς τη βάση δεδομένων της Access.




Παγίδευση την τιμή της στήλης ταυτότητας

Για να συνοψίσετε τα βήματα στο στοRowUpdatedτο συμβάν της DataAdapter, μπορείτε να παγιδεύσετε την τιμή της στήλης ιδιοτήτων που δημιουργείται για μια στήλη του πίνακα σε μια βάση δεδομένων της Access. ΣτοRowUpdatedσυμβάν, θα εκτελεστεί τηνΕΠΙΛΈΞΤΕ ΤΑΥΤΌΤΗΤΑ @@ερώτημα χρησιμοποιώντας έναν άλλοΕντολήτο αντικείμενο και στη συνέχεια θα αντιστοιχίσετε την τιμή που επιστρέφεται από το ερώτημα στη στήλη ταυτότητας. Τέλος, καλέστε τοAcceptChangesη μέθοδος τουDataRowτο αντικείμενο για να αποδεχτείτε την τιμή της στήλης.

Η παγίδευση την τιμή της στήλης ιδιοτήτων, ακολουθήστε τα εξής βήματα:
  1. Προσθέστε τον ακόλουθο κώδικα πριν από τηνΚύριοςΓια να δημιουργήσετε μια δεύτερη μέθοδοςOleDbCommandαντικείμενο για τοΕΠΙΛΈΞΤΕ ΤΑΥΤΌΤΗΤΑ @@Ερώτημα:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. Προσαρτήστε τον ακόλουθο κώδικα για τοΚύριοςμέθοδος για τη δημιουργία μιας νέας περιόδου λειτουργίας τουOleDbCommandCLASS:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. Προσαρτήστε τον ακόλουθο κώδικα για τοΚύριοςμέθοδος για το χειρισμό τουRowUpdatedΣυμβάν:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Προσαρτήστε τον ακόλουθο κώδικα για τοΚύριοςμέθοδος για την ενημέρωση των δεδομένων. Για ναRowUpdatedτο συμβάν ενεργοποιείται μετά την κλήση τουΕνημέρωσηΗ μέθοδος.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. Προσαρτήστε τον ακόλουθο κώδικα για τοΚύριοςμέθοδος για να αποθέσετε τοAutoIncrementTestπίνακας και αφήστε τους πόρους:
          ' 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. Προσθέστε τα εξήςRowUpdatedκώδικα χειρισμού συμβάντων 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. Στο διακομιστήΟ εντοπισμός σφαλμάτωνμενού, κάντε κλικ στο κουμπίStartΓια να εκτελέσετε την εφαρμογή. Στο παράθυρο "Έξοδος" εμφανίζονται οι τιμές στήλης ταυτότητας.


Ολοκλήρωση της λίστας κωδικών

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

Αναφορές

Για πρόσθετες πληροφορίες σχετικά με ένα σχετικό θέμα στο πρόγραμμα Visual Basic 6.0, κάντε κλικ στον αριθμό του άρθρου παρακάτω για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
232144ΠΛΗΡΟΦΟΡΙΕΣ: Jet OLE DB Provider έκδοση 4.0 υποστηρίζει SELECT @@ Identity
Για περισσότερες πληροφορίες, επισκεφθείτε την ακόλουθη τοποθεσία του MSDN στο Web:
Συμβάν OleDbDataAdapter.RowUpdated
.aspx http://msdn2.Microsoft.com/en-us/library/System.Data.OLEDB.oledbdataadapter.rowupdated (vs.71)

Ιδιότητες

Αναγν. άρθρου: 815629 - Τελευταία αναθεώρηση: Τετάρτη, 22 Δεκεμβρίου 2010 - Αναθεώρηση: 2.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Λέξεις-κλειδιά: 
kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:815629

Αποστολή σχολίων

 

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