Làm th? nào đ?: L?y giá tr? danh tính trong khi chèn b?n ghi vào cơ s? d? li?u truy c?p b?ng cách s? d?ng Visual Basic.NET

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 815629 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t-by-step này th?o lu?n v? làm th? nào đ? l?y l?i các Identity c?t giá tr? t? m?t cơ s? d? li?u truy c?p.

Đang truy xu?t các Giá tr? danh tính t? cơ s? d? li?u máy bay ph?n l?c là khác v?i SQL Server, b?i v? cơ s? d? li?u máy bay ph?n l?c không h? tr? hàng lo?t multi-statement l?nh. Máy bay ph?n l?c OLE DB Phiên b?n 4.0 nhà cung c?p h? tr? các CH?N @@ Identity truy v?n cho phép b?n đ? l?y giá tr? auto-tăng trư?ng đư?c t?o trên k?t n?i c?a b?n. Đ? ch?y các CH?N @@ Identity truy v?n, nó khuyên b?n s? d?ng khác OleDbCommand đ?i tư?ng. Bài vi?t này mô t? cách s? d?ng m?t l?n th? hai OleDbCommand đ? l?y l?i Identity c?t giá tr?.

Lưu ý: Tính năng này ho?t đ?ng ch? v?i cơ s? d? li?u Microsoft ph?n l?c OLEDB 4.0. Các phiên b?n trư?c c?a Microsoft ph?n l?c OLEDB không h? tr? đi?u này tính năng.

THÔNG TIN THÊM

K?t n?i v?i cơ s? d? li?u Access

Đ? k?t n?i v?i cơ s? d? li?u Access và t?o m?t b?ng v?i các Nh?n d?ng c?t, làm theo các bư?c sau:
  1. B?t đ?u Microsoft Visual Studio.NET 2002.
  2. Trên các Tệp tr?nh đơn, đi?m đ?nM?i, sau đó b?m Dự án.
  3. Dư?i Các lo?i d? án, b?m Th? giác Các d? án cơ b?n. Dư?i Khuôn mẫu o dan adran, b?m vàoGiao di?n đi?u khi?n ?ng d?ng. Theo m?c đ?nh, Module1.vb là t?o ra.
  4. Tên d? án MyJetApplication sau đó b?m Ok.
  5. Thay th? m? hi?n có v?i đo?n m? sau:
    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. S?a đ?i tên ngu?n d? li?u chu?i k?t n?i đ?n tr? đ?n cơ s? d? li?u truy c?p c?a b?n.




B?y Identity Column Value

Đ? tóm t?t các bư?c, trong các RowUpdated s? ki?n DataAdapter, b?n có th? b?y các giá tr? c?t danh tính mà đư?c t?o ra cho m?t c?t m?t b?ng trong m?t cơ s? d? li?u truy c?p. Trong các RowUpdated s? ki?n, b?n s? ch?y các CH?N @@ IDENTITY truy v?n b?ng cách s? d?ng khác Ch? huy đ?i tư?ng, và sau đó b?n s? ch? đ?nh giá tr? đư?c tr? v? b?i các truy v?n đ? nh?n d?ng c?t. Cu?i cùng, h?y g?i các AcceptChanges phương pháp c?a các DataRow đ?i tư?ng đ? ch?p nh?n giá tr? c?t.

Cái b?y các nh?n d?ng c?t có giá tr?, h?y làm theo các bư?c sau:
  1. Thêm m? sau đây trư?c khi các Chính phương pháp đ? t?o ra m?t l?n th? hai OleDbCommand đ?i tư?ng cho các CH?N @@ IDENTITY truy v?n:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. N?i thêm m? sau đây đ? các Chính phương pháp cho vi?c t?o ra m?t trư?ng h?p m?i c?a OleDbCommand l?p:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. N?i thêm m? sau đây đ? các Chính phương pháp x? l? các RowUpdated s? ki?n:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. N?i thêm m? sau đây đ? các Chính phương pháp cho vi?c c?p nh?t d? li?u. Các RowUpdated s? ki?n đư?c đưa lên sau khi quay các Cập nhật phương pháp.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. N?i thêm m? sau đây đ? các Chính phương pháp đ? th? các AutoIncrementTest b?ng và phát hành các ngu?n tài nguyên:
          ' 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. Thêm dư?i đây RowUpdated s? ki?n x? l? m? đ? 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. Trên các G? l?i tr?nh đơn, nh?p vàoB?t đ?u đ? ch?y các ?ng d?ng. Identity c?t giá tr? hi?n th? trong c?a s? đ?u ra.


Danh sách m? đ?y đ?

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

THAM KH?O

Đ? thêm thông tin v? m?t ch? đ? liên quan trong Visual Basic 6.0, nh?p vào s? bài vi?t sau đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
232144Thông báo: Máy bay ph?n l?c OLE DB nhà cung c?p phiên b?n 4.0 H? tr? ch?n @@ danh tính
Đ? bi?t thêm chi ti?t, h?y truy c?p trang Web MSDN sau Trang web:
S? ki?n OleDbDataAdapter.RowUpdated
http://msdn2.Microsoft.com/en-US/Library/System.Data.oledb.oledbdataadapter.rowupdated (vs.71) .aspx

Thu?c tính

ID c?a bài: 815629 - L?n xem xét sau cùng: 28 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
T? khóa: 
kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:815629

Cung cấp Phản hồi

 

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