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.
Tersambung ke Access Database
Untuk menyambung ke akses Database dan membuat sebuah tabel dengan
Identitas kolom, ikuti langkah berikut:
- Mulai Microsoft Visual Studio.NET 2002.
- Pada Berkas menu, titikBaru, lalu klik Project.
- Di bawah Jenis proyek, klik Visual
Dasar proyek. Di bawah Pola acu KlikAplikasi konsol. Secara default, Module1.vb adalah
dibuat.
- Nama proyek MyJetApplication kemudian klik Oke.
- 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
- 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:
- 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
- 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
- Menambahkan kode berikut untuk Utama metode untuk penanganan RowUpdated acara:
' Delegate for handling RowUpdated event.
AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated - Menambahkan kode berikut untuk Utama metode untuk meng-update data. The RowUpdated acara dibangkitkan setelah panggilan Pemutakhiran metode.
' Update the Data
oleDa.Update(dtTest)
- 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 - 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
- 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
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:
232144
(http://support.microsoft.com/kb/232144/EN-US/
)
INFO: Jet penyedia DB OLE versi
4.0 Mendukung Pilih @@ identitas
Untuk informasi lebih lanjut, kunjungi Website MSDN berikut
situs:
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
| kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMtid |
Penerjemahan MesinPENTING: 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
(http://support.microsoft.com/kb/815629/en-us/
)