كيفية: استرداد قيمة الهوية أثناء إدراج السجلات في الوصول إلى قاعدة البيانات باستخدام Visual Basic.NET

للحصول على إصدار Microsoft Visual C#.NET من هذه المقالة، راجع
816112 .

في هذه المهمة

ملخص

تتناول هذه المقالة خطوة بخطوة كيفية استرداد قيمة عمود الهوية من قاعدة بيانات Access.

استرداد قيمة الهوية من قاعدة بيانات Jet يختلف من SQL Server لقاعدة بيانات Jet لا يدعم أوامر الحزم عبارة متعددة. إصدار Jet OLE DB الموفر 4.0 يدعم استعلام تحديد @@Identity الذي يسمح لك باسترداد قيمة الحقل الزيادة التلقائية التي تم إنشاؤها على الاتصال. لتشغيل استعلام تحديد @@Identity ، من المستحسن استخدام كائن OleDbCommand آخر. توضح هذه المقالة كيفية استخدام ثاني OleDbCommand لاسترداد قيمة عمود الهوية.

ملاحظة: تعمل هذه الميزة فقط مع قواعد بيانات Microsoft Jet OLEDB 4.0. لا تدعم هذه الميزة الإصدارات السابقة من Microsoft Jet OLEDB.

العودة إلى أعلى

مزيد من المعلومات

الاتصال بقاعدة بيانات Access

للاتصال بقاعدة بيانات Access وإنشاء جدول مع عمود تعريف، اتبع الخطوات التالية:
  1. بدء تشغيل Microsoft Visual Studio.NET 2002.
  2. في القائمة ملف ، أشر إلى
    جديد، ثم انقر فوق المشروع.
  3. ضمن أنواع المشروع، انقر فوق مشاريع Visual Basic. ضمن المقطع قوالب ، انقر فوق
    تطبيق وحدة التحكم. بشكل افتراضي، يتم إنشاء Module1.vb.
  4. اسم المشروع ميجيتابليكيشن ومن ثم انقر فوق موافق.
  5. استبدال التعليمات البرمجية الموجودة مع التعليمات البرمجية التالية:
    Imports SystemImports 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.


العودة إلى أعلى

تعويض عن قيمة عمود الهوية

لتلخيص الخطوات الموجودة في حدث RowUpdated DataAdapter، يمكنك تعويض عن قيمة عمود الهوية التي يتم إنشاؤها لعمود من جدول في قاعدة بيانات Access. في الحدث RowUpdated ، سيتم تشغيل استعلام تحديد @@IDENTITY باستخدام كائن آخر الأمر ، وثم سيتم تعيين القيمة التي يتم إرجاعها بواسطة الاستعلام لعمود تعريف. وأخيراً، استدعاء الأسلوب أكسيبتشانجيس للكائن DataRow لقبول قيمة العمود.

الملائمة عن قيمة عمود الهوية، اتبع الخطوات التالية:
  1. أضف التعليمات البرمجية التالية قبل الأسلوب الرئيسي لإنشاء كائن OleDbCommand ثاني تحديد @@IDENTITY الاستعلام:
       ' Create OleDbCommand for SELECT @@IDENTITY statement   Private cmdGetIdentity As OleDbCommand
  2. إلحاق التعليمة البرمجية التالية إلى الأسلوب الرئيسي لإنشاء مثيل جديد من فئة OleDbCommand :
          ' Create another command to get IDENTITY value.      cmdGetIdentity = New OleDbCommand()
    cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
    cmdGetIdentity.Connection = cnJetDB


  3. إلحاق التعليمة البرمجية التالية إلى الأسلوب الرئيسي لمعالجة الحدث RowUpdated :
          ' Delegate for handling RowUpdated event.      AddHandler oleDa.RowUpdated, AddressOf HandleRowUpdated
  4. إلحاق التعليمة البرمجية التالية إلى الأسلوب الرئيسي لتحديث البيانات. يتم رفع الحدث RowUpdated بعد استدعاء أسلوب التحديث .
          ' Update the Data      oleDa.Update(dtTest)

  5. إلحاق التعليمة البرمجية التالية إلى الأسلوب الرئيسي لإسقاط الجدول AutoIncrementTest وتحرير الموارد:
          ' 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. إضافة رمز معالج الحدث RowUpdated التالية إلى الوحدة النمطية 1:
       ' 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. في القائمة " تصحيح "، انقر فوق
    بدء تشغيل التطبيق. يتم عرض القيم في عمود الهوية في نافذة الإخراج.
العودة إلى أعلى

إتمام سرد التعليمات البرمجية

Imports SystemImports 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

المراجع

للحصول على معلومات إضافية حول أحد الموضوعات مرتبطة في Visual Basic 6.0، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":
معلومات 232144 : Jet OLE DB الموفر الإصدار 4.0 دعم تحديد @@Identity
لمزيد من المعلومات، قم بزيارة موقع Msdn التالي:عودة إلى الأعلى الخطأ رقم: 2835 (تعديل المحتوى)
خصائص

رقم الموضوع: 815629 - آخر مراجعة: 15‏/01‏/2017 - المراجعة: 1

تعليقات