NASIL yapılır: Visual Basic .NET kullanarak kayıtlara erişim ekleme veritabanı sırasında kimlik değerini almak

Makale çevirileri Makale çevirileri
Makale numarası: 815629 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede, bir Access veritabanından kimlik sütun değerini almak nasıl açıklanır.

Jet veritabanı birden çok deyim toplu iş komutları desteklemiyor Jet veritabanından kimlik değeri alınırken SQL Server, farklı olmasıdır. Jet OLE DB sürüm 4.0 sağlayıcısı @@Identity Seç sorgusunu destekler, bağlantınızı üzerinde oluşturulan otomatik gerçekle?tirme alanın değerini almanıza olanak tanır. @@Identity Seç sorgusunu çalıştırmak için başka bir OleDbCommand nesne kullanmanız önerilir. Bu makalede OleDbCommand ikinci bir kimlik sütun değerini almak için nasıl kullanılacağını açıklar.

Not:Bu özellik yalnızca Microsoft Jet OLEDB 4.0 veritabanları ile çalışır. Microsoft Jet OLEDB önceki sürümlerinde bu özelliği desteklemez.

Daha fazla bilgi

Access veritabanına bağlan

Access veritabanına bağlanarak kimlik sütunu bir tablo oluşturmak için şu adımları izleyin:
  1. Microsoft Visual Studio .NET 2002 başlatın.
  2. Dosya menüsündeYeni' nin üzerine ve sonra Proje'yitıklatın.
  3. Proje türlerialtında VisualBasic projeleritıklatın. Şablonlar altındaConsole Application' i tıklatın. Varsayılan olarak, Module1.vb iscreated.
  4. Projeyi MyJetApplication olarak adlandırın ve sonra da Tamam' ı tıklatın.
  5. Varolan kodu aşağıdaki kodla değiştirin:
    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 veritabanı için bağlantı dizesi topoint veri kaynağı adını değiştirin.




Kimlik sütun değerini tuzak

Adımlarda, DataAdapter nesnesinin RowUpdated olay özetlemek için Access veritabanında bir tablonun sütun için oluşturulan kimlik sütun değerini yakalayabilirsiniz. RowUpdated olay başka bir Command nesnesi kullanarak sorgu @@IDENTITY Seç çalışacaktır; kimlik sütunu sorgu tarafından döndürülen değeri atar. Son olarak, sütun değeri kabul etmek üzere DataRow nesnesinin AcceptChanges yöntemini çağırın.

Tuzak kimlik sütun değerini, aşağıdaki adımları izleyin:
  1. Main yöntemi @@IDENTITY SEÇMEK sorgu için ikinci bir OleDbCommand nesnesi oluşturmak için önce aşağıdaki kodu ekleyin:
       ' Create OleDbCommand for SELECT @@IDENTITY statement
       Private cmdGetIdentity As OleDbCommand
  2. OleDbCommand sınıfın yeni bir örneğini oluşturmak için Main yöntemine aşağıdaki kodu ekleyin:
          ' Create another command to get IDENTITY value.
          cmdGetIdentity = New OleDbCommand()
          cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
          cmdGetIdentity.Connection = cnJetDB
    
    
  3. RowUpdated olay işleme Main yöntemine aşağıdaki kodu ekleyin:
          ' Delegate for handling RowUpdated event.
          AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. Verileri güncelleştirmek için Main yöntemine aşağıdaki kodu ekleyin. RowUpdated olayı, Update yöntemi çağrıldıktan sonra oluşturulur.
          ' Update the Data
          oleDa.Update(dtTest)
    
  5. Aşağıdaki kod, AutoIncrementTest tabloyu bırakıp kaynakları serbest bırakmak için Main yöntemine ekleyin:
          ' 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. Module1 aşağıdaki RowUpdated olay işleyicisi kodunu ekleyin:
       ' 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. Hata ayıklama menüsünde, uygulama çalıştırmak içinBaşlat ' ı tıklatın. Output penceresinde kimlik sütun değerleri aredisplayed.


Tam kod listesi

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

Referanslar

Visual Basic 6.0 ilgili bir konu hakkında ek bilgi için Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
232144 BİLGİ: Jet OLE DB sağlayıcı sürüm 4.0 destekleyen @@Identity seçin.
Daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
OleDbDataAdapter.RowUpdated olayı
http://msdn2.microsoft.com/en-us/library/System.Data.OLEDB.OleDbDataAdapter.RowUpdated (vs.71).aspx

Özellikler

Makale numarası: 815629 - Last Review: 23 Kasım 2013 Cumartesi - Gözden geçirme: 4.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft ADO.NET 1.1
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster kbmt KB815629 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, Microsoft Makine Çevirisi Düzenleme yazılımı tarafından tercüme edilmiş olup, yüksek olasılıkla profesyonel bir çevirmen yerine CTF teknolojisi kullanılarak, Microsoft Topluluğu tarafından düzenlenmiştir. Microsoft, Bilgi Bankamız içindeki tüm makaleleri kendi dilinizde okuyabilmeniz için size hem profesyonel çevirmenler tarafından tercüme edilen hem de makine tarafından tercüme edildikten sonra Topluluk tarafından kontrol edilen makaleler sunar. Bununla birlikte, makine tarafından tercüme edilen, hatta Topluluk tarafından kontrol edilen bir makale bile her zaman mükemmel dil kalitesinde olmayabilir. Makalede dilinizi konuşan yabancı birisinin yapabileceği türden sözcük, söz dizimi veya dilbilgisi hataları bulunabilir. Microsoft, içeriğin hatalı tercümesinin veya müşterilerimiz tarafından kullanımının doğurabileceği olası yanlış anlamalar, hatalar veya zararlardan sorumlu değildir. Öte yandan Microsoft, Makine Çevirisi Düzenleme işlemini geliştirmek amacıyla Makine Çevirisi Düzenleme yazılımını ve araçlarını sık sık güncelleştirmektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 815629

Geri Bildirim Ver

 

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