أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

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

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية815629
للحصول على إصدار Microsoft Visual C# .NET من هذه المقالة، راجع 816112.

في هذه المهمة

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

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

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

back to the top
معلومات أخرى

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

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


back to the top

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

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

اعتراض قيمة عمود الهوية اتبع الخطوات التالية:
  1. قم بإضافة التعليمات البرمجية التالية قبل الأسلوب الرئيسي لإنشاء كائن OleDbCommand ثاني الاستعلام SELECT @@ 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. من القائمة تصحيح ، انقر فوق "ابدأ" لتشغيل التطبيق. يتم عرض قيم العمود هوية في الإطار إخراج.
back to the top

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

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
مراجع
للحصول على معلومات إضافية حول أحد الموضوعات المرتبطة في Visual Basic 6.0 انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
232144INFO: Jet OLE DB الموفر الإصدار 4.0 يدعم SELECT @@ الهوية
لمزيد من المعلومات، قم بزيارة موقع MSDN التالي على الويب:back to the top

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 815629 - آخر مراجعة: 05/12/2007 06:27:53 - المراجعة: 3.2

Microsoft ADO.NET 1.0, Microsoft ADO.NET 1.1, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition

  • kbmt kbjet kbprogramming kbtsql kbsystemdata kbhowtomaster KB815629 KbMtar
تعليقات
e="text/JavaScript" async=""> var varAutoFirePV = 1; var varClickTracking = 1; var varCustomerTracking = 1; var Route = "76500"; var Ctrl = ""; document.write(" =4050&did=1&t=">