CARA: Mengambil nilai identitas saat memasukkan data ke dalam Access Database dengan menggunakan Visual Basic.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 815629 - Melihat produk di mana artikel ini berlaku.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini membahas cara untuk mengambil identitas kolom nilai dari akses database.

Mengambil Identitas nilai dari Jet database berbeda dari SQL Server, karena Jet database tidak mendukung perintah multi-statement batch. Jet Mendukung penyedia OLE DB versi 4.0 Pilih @@ identitas permintaan yang memungkinkan Anda untuk mengambil nilai auto increment lapangan yang dihasilkan pada koneksi Anda. Untuk menjalankan Pilih @@ identitas permintaan, dianjurkan bahwa Anda menggunakan lain OleDbCommand objek. Artikel ini menjelaskan cara menggunakan kedua OleDbCommand untuk mengambil nilai kolom identitas.

Catatan: Fitur ini hanya bekerja dengan Microsoft Jet OLEDB 4.0 database. Versi sebelumnya dari Microsoft Jet OLEDB tidak mendukung ini fitur.

INFORMASI LEBIH LANJUT

Tersambung ke Access Database

Untuk menyambung ke akses Database dan membuat sebuah tabel dengan Identitas kolom, ikuti langkah berikut:
  1. Mulai Microsoft Visual Studio.NET 2002.
  2. Pada Berkas menu, titikBaru, lalu klik Project.
  3. Di bawah Jenis proyek, klik Visual Dasar proyek. Di bawah Pola acu KlikAplikasi konsol. Secara default, Module1.vb adalah dibuat.
  4. Nama proyek MyJetApplication kemudian klik Oke.
  5. Mengganti kode yang ada dengan kode berikut:
    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. Mengubah nama sumber Data dalam rangkaian sambungan untuk Arahkan ke Database akses Anda.




Perangkap identitas kolom nilai

Untuk meringkas langkah-langkah, di RowUpdated acara DataAdapter, Anda dapat perangkap identitas kolom nilai yang dihasilkan untuk kolom tabel dalam Database Access. Dalam RowUpdated acara, Anda akan menjalankan PILIH @@ IDENTITAS permintaan dengan menggunakan lain Perintah objek, dan kemudian Anda akan menetapkan nilai yang dikembalikan oleh permintaan untuk kolom identitas. Terakhir, panggilan AcceptChanges metode DataRow objek untuk menerima nilai kolom.

Perangkap identitas kolom nilai, ikuti langkah berikut:
  1. Tambahkan kode berikut sebelum Utama metode untuk membuat kedua OleDbCommand objek untuk PILIH @@ IDENTITAS permintaan:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. Menambahkan kode berikut untuk Utama metode untuk membuat contoh yang baru OleDbCommand kelas:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. Menambahkan kode berikut untuk Utama metode untuk penanganan RowUpdated acara:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Menambahkan kode berikut untuk Utama metode untuk meng-update data. The RowUpdated acara dibangkitkan setelah panggilan Pemutakhiran metode.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. Menambahkan kode berikut untuk Utama metode untuk menjatuhkan AutoIncrementTest tabel dan melepaskan sumber daya:
          ' 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. Tambahkan berikut RowUpdated event handler kode untuk 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. Pada Debug menu, klikMulai untuk menjalankan aplikasi. Nilai-nilai kolom identitas ditampilkan di jendela Output.


Daftar kode lengkap

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

REFERENSI

Untuk informasi tambahan tentang topik terkait dalam Visual Basic 6.0, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
232144INFO: Jet penyedia DB OLE versi 4.0 Mendukung Pilih @@ identitas
Untuk informasi lebih lanjut, kunjungi Website MSDN berikut situs:
Peristiwa OleDbDataAdapter.RowUpdated
.aspx http://msdn2.Microsoft.com/en-us/library/System.data.oledb.oledbdataadapter.rowupdated (vs.71)

Properti

ID Artikel: 815629 - Kajian Terakhir: 04 Oktober 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Kata kunci: 
kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:815629

Berikan Masukan

 

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