Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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

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
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.

Quay lại các đầu trang
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 SystemImports System.DataImports System.Data.OleDbModule 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 SubEnd 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.


Quay lại các đầu trang

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.
Quay lại các đầu trang

Danh sách mã đầy đủ

Imports SystemImports System.DataImports System.Data.OleDbModule 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 SubEnd 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:Quay lại các đầu trang

Cảnh báo: Bài viết này đã được dịch tự động

Thuộc tính

ID Bài viết: 815629 - Xem lại Lần cuối: 08/28/2011 09:42:00 - Bản sửa đổi: 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 KbMtvi
Phản hồi