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

كيفية استخدام ADO.NET لاسترداد السجلات في مصنف Excel وتعديلها باستخدام Visual Basic .NET‏

انتهاء دعم Office 2003

لقد أنهت شركة Microsoft دعم Office 2003 في 8 أبريل، 2014. وقد أثر هذا التغيير على تحديثات البرامج لديك وخيارات الأمان الخاصة بك. تعرف على ما يعنيه ذلك فيما يتعلق بك وكيفية الحفاظ على حمايتك.

الموجز
توضح هذه المقالة كيفية استخدام ADO.NET لاسترداد بيانات من مصنف Microsoft Excel وتعديل البيانات في مصنف موجود بالفعل أو إضافة بيانات إلى مصنف جديد. للوصول إلى مصنفات Excel باستخدام ADO.NET، يمكنك استخدام موفر Jet OLE DB؛ وتوفر هذه المقالة المعلومات التي تحتاجها بحيث يمكنك استخدام موفر Jet OLE DB عندما يكون برنامج Excel هو مصدر البيانات الهدف.

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

كيفية استخدام موفر Jet OLE DB مع مصنفات Microsoft Excel

يمكن لمشغّل قاعدة بيانات Microsoft Jet الوصول إلى بيانات بتنسيقات ملفات قواعد بيانات أخرى، مثل مصنفات Excel، من خلال برامج تشغيل "أسلوب الوصول المتتالي المفهرس" (ISAM) القابل للتثبيت. لفتح تنسيقات خارجية مدعمة بواسطة موفر Microsoft Jet 4.0 OLE DB، حدد نوع قاعدة البيانات في الخصائص الموسعة للاتصال. يدعم موفر Jet OLE DB أنواع قواعد البيانات التالية لمصنفات Microsoft Excel:
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
ملاحظة: استخدم نوع قاعدة بيانات مصدر Excel 5.0 لمصنفات Microsoft Excel 5.0 و7.0 (95) واستخدم نوع قاعدة بيانات مصدر Excel 8.0 لمصنفات Microsoft Excel 8.0 ‏(97) و9.0 (2000) و10.0 (2002). تستخدم الأمثلة الواردة في هذه المقالة مصنفات Excel بتنسيق Excel 2000 وExcel 2002.

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

سلسلة الاتصال

للوصول إلى مصنف Excel باستخدام موفر Jet OLE DB، استخدم سلسلة اتصال ببناء الجملة التالي:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES;"‎
في سلسلة الاتصال، حدد اسم الملف ومساره بالكامل للمصنف الموجود في معلمة Data Source. قد تحتوي المعلمة Extended Properties على خاصيتين: خاصية لإصدار ISAM وأخرى للإشارة إلى ما إذا كان الجدول (الجداول) يحتوي على رؤوس أم لا.

في مصنفات Excel، يكون الصف الأول في نطاق هو صف الرأس (أو أسماء الحقول) افتراضيًا. إذا كان النطاق الأول لا يحتوي على رؤوس، يمكنك تحديد HDR=NO في الخصائص الموسعة في سلسلة الاتصال الخاصة بك. وفي حالة تحديد HDR=NO في سلسلة الاتصال، يقوم موفر Jet OLE DB تلقائيًا بتسمية الحقول نيابةً عنك (يمثل F1 الحقل الأول، ويمثل F2 الحقل الثاني وهكذا).

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

أنواع البيانات

على عكس قاعدة البيانات التقليدية، لا توجد طريقة مباشرة لتحديد أنواع البيانات للأعمدة في جداول Excel. بدلاً من ذلك، يقوم موفر OLE DB بفحص ثمانية صفوف في عمود لـ تخمين نوع بيانات الحقل. يمكنك تغيير عدد الصفوف للفحص بتحديد قيمة بين واحد (1) وستة عشر (16) للإعداد MAXSCANROWS في الخصائص الموسعة لسلسلة الاتصال الخاصة بك.

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

اصطلاحات تسمية الجداول

هناك عدة طرق للرجوع إلى جدول (أو نطاق) في مصنف Excel:
  • استخدام اسم الورقة متبوعًا بعلامة الدولار (على سبيل المثال، [Sheet1$] أو [My Worksheet$]). ويتضمن جدول المصنف الذي تتم الإشارة إليه بهذه الطريقة النطاق المستخدم بالكامل لورقة العمل.
    Select * from [Sheet1$]‎
  • استخدام نطاق باسم محدد (على سبيل المثال، [MyNamedRange]):
    Select * from [MyNamedRange]‎
  • استخدام نطاق بعنوان محدد (على سبيل المثال، [Sheet1$A1:B10]):
    Select * from [Sheet1$A1:B10]‎
ملاحظة: تشير علامة الدولار التي تتبع اسم ورقة العمل إلى وجود الجدول. إذا كنت تقوم بإنشاء جدول جديد، كما هو موضح في القسم إنشاء جداول ومصنفات جديدة من هذه المقالة، لا تستخدم علامة الدولار.

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

كيفية استخدام مصنفات Excel كمصادر بيانات ADO.NET

استرداد السجلات

يمكنك استرداد السجلات من قاعدة بيانات باستخدام إحدى طريقتي ADO.NET: باستخدام Dataset أو DataReader.

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

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

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

إضافة سجلات وتحديثها

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

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')‎
    أو أمر لتحديث السجلات

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'‎
    ثم استدعاء الأسلوب ExecuteNonQuery.
  • إجراء تغييرات على طريقة DataSet التي قمت بملئها بجدول/استعلام من مصنف Excel ثم استدعاء الأسلوب Update الخاص بـ DataAdapter لتحويل التغييرات من DataSet إلى المصنف مرة أخرى. على الرغم من ذلك، لاستخدام الأسلوب Update لتحويل التغيير، يجب تعيين أوامر ذات معلمات لـ InsertCommand الخاص بـ DataAdapter.
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)‎
    وUpdateCommand:
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?‎
    الأمران INSERT وUPDATE ذوا المعلمات مطلوبان نظرًا لعدم قيام OleDbDataAdapter بتوفير معلومات مفتاح/فهرس لمصنفات Excel؛ وبدون حقول مفتاح/فهرس، لا يتمكن CommandBuilder من إنشاء الأوامر تلقائيًا.
  • تصدير بيانات من مصدر بيانات آخر إلى مصنف Excel بشرط إمكانية استخدام مصدر البيانات الآخر مع موفر Jet OLE DB. تتضمن مصادر البيانات التي يمكن استخدامها مع موفر Jet OLE DB بهذه الطريقة الملفات النصية وقواعد بيانات Microsoft Access وبالطبع مصنفات Excel الأخرى. باستخدام أمر INSERT INTO واحد، يمكنك تصدير البيانات من جدول/استعلام آخر إلى المصنف الخاص بك:
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"‎
    يتطلب الأمر INSERT INTO وجود الجدول (أو ورقة العمل) الهدف بالفعل؛ حيث يتم إلحاق البيانات بالجدول الهدف.

    يمكنك أيضًَا استخدام الأمر SELECT..INTO لتصدير الجدول/الاستعلام الخاص بك إلى مصنف:
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]‎
    عند استخدام SELECT..INTO، في حالة عدم وجود المصنف أو الجدول الهدف، سيتم إنشاؤه لك. وفي حالة وجود الجدول بالفعل قبل إصدار الأمر SELECT..INTO، سيظهر خطأ.
يوضح القسم نموذج لتعليمة برمجية الذي سيتم عرضه لاحقًا في هذه المقالة كل طريقة من هذه الطرق لإضافة السجلات وتحديثها في مصنف.

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

حذف سجلات

على الرغم من أن موفر Jet OLE DB يتيح لك إمكانية إدراج السجلات وتحديثها في مصنف Excel، إلا أنه لا يسمح لك بعمليات DELETE (حذف). إذا حاولت إجراء عملية DELETE في سجل واحد أو أكثر، تتلقى رسالة الخطأ التالية:
‏‏حذف البيانات في جدول مرتبط غير معتمد بواسطة ISAM هذا.
هذا القيد متضمن في معالجة مصنفات Excel كقواعد بيانات.

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

إنشاء جداول ومصنفات جديدة

لإنشاء جدول في مصنف Excel، قم بتشغيل الأمر CREATE TABLE:
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))‎
عند تشغيل هذا الأمر، يتم إنشاء ورقة عمل جديدة باسم الجدول الذي تقوم بتحديده في الأمر. في حالة عدم وجود المصنف الخاص بالاتصال، سيتم إنشاؤه أيضًا.

يوضح القسم نموذج لتعليمة برمجية كيف يمكنك استخدام الأمر CREATE TABLE لإنشاء مصنف وجدول جديدين.

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

خطوة بخطوة

نموذج لتعليمة برمجية

  1. قم ببدء تشغيل مشروع Windows Application (تطبيقات Windows) جديد لـ Visual Basic .NET.

    يتم إنشاء Form1 افتراضيًا.
  2. قم بإضافة ستة عناصر تحكم RadioButton وعنصر تحكم Button لـ Form1.
  3. حدد كل عناصر تحكم RadioButton وقم بتعيين الخاصية Size (الحجم) إلى 200,24.
  4. في القائمة عرض، انقر فوق تعليمات برمجية.
  5. قم بإضافة السطر التالي في بداية الوحدة النمطية للتعليمات البرمجية:
    Imports System.Data.OleDb
  6. قم بإدراج التعليمات البرمجية التالية في الفئة Form:
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _‎               ‎"Data Source=C:\ExcelData1.xls;" & _‎               ‎"Extended Properties=""Excel 8.0;HDR=YES"""‎Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _‎               ‎"Data Source=C:\ExcelData2.xls;" & _‎               ‎"Extended Properties=""Excel 8.0;HDR=YES"""‎Private m_sNorthwind = _‎      "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"Private m_sAction As StringPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load      RadioButton1.Text = "Create_Workbook"‎      RadioButton2.Text = "Retrieve_Records"‎      RadioButton3.Text = "Add_Records"‎      RadioButton4.Text = "Update_Records"‎      RadioButton5.Text = "Update_Individual_Cells"‎      RadioButton6.Text = "Use_External_Source"‎      Button1.Text = "Go!"‎End SubPrivate Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _‎      Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _‎      RadioButton4.Click, RadioButton5.Click, RadioButton6.Click      m_sAction = sender.Text'Store the text for the selected radio buttonEnd SubPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click      Try         ‎' Call the associated routine to add/update/modify the workbook.‎         Select Case m_sAction            Case "Create_Workbook" : Create_Workbook()‎            Case "Retrieve_Records" : Retrieve_Records()‎            Case "Add_Records" : Add_Records()‎            Case "Update_Records" : Update_Records()‎            Case "Update_Individual_Cells" : Update_Individual_Cells()‎            Case "Use_External_Source" : Use_External_Source()‎         End Select      Catch ex As OleDbException         Dim er As OleDbError         For Each er In ex.Errors            MsgBox(er.Message)‎         Next      Catch ex2 As System.InvalidOperationException         MsgBox(ex2.Message)‎      End TryEnd SubPublic Sub Create_Workbook()‎      ‎' If the workbooks already exist, prompt to delete.‎      Dim answer As MsgBoxResult      If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then          answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _‎                   "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)‎          If answer = MsgBoxResult.Yes Then              If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")‎              If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")‎          Else              Exit Sub          End If      End If'==========================================================================      ‎' Create a workbook with a table named EmployeeData. The table has 3      ‎' fields: ID (char 255), Name (char 255) and Birthdate (date).‎  '==========================================================================      Dim conn As New OleDbConnection()‎      conn.ConnectionString = m_sConn1      conn.Open()‎      Dim cmd1 As New OleDbCommand()‎      cmd1.Connection = conn      cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"‎      cmd1.ExecuteNonQuery()‎      cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"‎      cmd1.ExecuteNonQuery()‎      conn.Close()‎‎'==========================================================================      ‎' Create a workbook with a table named InventoryData. The table has 3       ‎' fields: Product (char 255), Qty (float) and Price (currency).‎ ‎'==========================================================================      conn.ConnectionString = m_sConn2      conn.Open()‎      Dim cmd2 As New OleDbCommand()‎      cmd2.Connection = conn      cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"‎      cmd2.ExecuteNonQuery()‎      cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"‎      cmd2.ExecuteNonQuery()‎      cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"‎      cmd2.ExecuteNonQuery()‎      conn.Close()‎      ‎' NOTE: You can ALTER and DROP tables in a similar fashion.‎End SubPublic Sub Retrieve_Records()‎      ‎'==========================================================      ‎'Use a DataReader to read data from the EmployeeData table.‎      ‎'==========================================================      Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)‎      conn1.Open()‎      Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)‎      Dim rdr As OleDbDataReader = cmd1.ExecuteReader      Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")‎      Do While rdr.Read()         Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _‎            rdr.GetString(0), rdr.GetString(1), _‎            rdr.GetDateTime(2).ToString("d")))‎      Loop      rdr.Close()‎      conn1.Close()‎      ‎'========================================================      ‎'Use a DataSet to read data from the InventoryData table.‎      ‎'========================================================      Dim conn2 As New OleDbConnection(m_sConn2)‎      Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)‎      Dim ds As DataSet = New DataSet()‎      da.Fill(ds)‎      Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")‎      Dim dr As DataRow      For Each dr In ds.Tables(0).Rows'Show results in output window         Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _‎            dr("Product"), dr("Qty"), dr("Price")))      Next      conn2.Close()‎End SubPublic Sub Add_Records()‎'==========================================================================      ‎' Run an INSERT INTO command to add new records to the workbook.‎ '==========================================================================      Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)‎      conn1.Open()‎      Dim cmd As New System.Data.OleDb.OleDbCommand()‎      cmd.Connection = conn1      cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate)‎ values ('CCC', 'Charlie', '10/14/48')"‎      cmd.ExecuteNonQuery()‎      cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate)‎ values ('DDD', 'Deloris', '7/19/98')"‎      cmd.ExecuteNonQuery()‎      conn1.Close()‎      '====================================================================      ‎'Use the InsertCommand object to add new records to the InventoryData      ‎'table.‎      '====================================================================      Dim conn2 As New OleDbConnection(m_sConn2)‎‎      Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)‎      Dim ds As DataSet = New DataSet()‎      da.Fill(ds, "MyExcelTable")‎      ‎' Generate the InsertCommand and add the parameters for the command.‎      da.InsertCommand = New OleDbCommand( _‎         ‎"INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)‎      da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")‎      da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"‎      da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"‎      ‎' Add two new records to the dataset.‎      Dim dr As DataRow      dr = ds.Tables(0).NewRow      dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 :‎ ds.Tables(0).Rows.Add(dr)‎      dr = ds.Tables(0).NewRow      dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 :‎ ds.Tables(0).Rows.Add(dr)      ‎' Apply the dataset changes to the actual data source (the workbook).‎      da.Update(ds, "MyExcelTable")‎      conn2.Close()‎End SubPublic Sub Update_Records()‎'==========================================================================      ‎' Run an UPDATE command to change a record in the EmployeeData      ‎'table.‎'==========================================================================      Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)‎      conn1.Open()‎      Dim cmd As New System.Data.OleDb.OleDbCommand()‎      cmd.Connection = conn1      cmd.CommandText = "UPDATE [EmployeeData$] " & _‎                    ‎"SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"‎      cmd.ExecuteNonQuery()‎      conn1.Close()‎      '====================================================================      ‎' Use the UpdateCommand object to modify records in the InventoryData      ‎'table.‎      '====================================================================      Dim conn2 As New OleDbConnection(m_sConn2)‎      Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)‎      Dim ds As DataSet = New DataSet()‎      da.Fill(ds, "MyInventoryTable")‎      ‎' Generate the UpdateCommand and add the parameters for the command.‎      da.UpdateCommand = New OleDbCommand( _‎         ‎"UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)‎      da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn =‎ "Qty"‎      da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"‎      da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")‎      ‎' Update the first two records.‎      ds.Tables(0).Rows(0)("Qty") = 1000      ds.Tables(0).Rows(0)("Price") = 10.1      ds.Tables(0).Rows(1)("Qty") = 2000      ds.Tables(0).Rows(1)("Price") = 20.2      ‎' Apply the dataset changes to the actual data source (the workbook).‎      da.Update(ds, "MyInventoryTable")‎      conn2.Close()‎End SubPublic Sub Update_Individual_Cells()‎'==========================================================================      ‎' Update individual cells on the EmployeeData worksheet;‎       ‎' specifically, cells F3, G3, and I4 are modified.‎'==========================================================================      ‎' NOTE: The connection string indicates that the table does *NOT*       ‎' have a header row.‎      Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))      conn.Open()‎      Dim cmd As New System.Data.OleDb.OleDbCommand()‎      cmd.Connection = conn      cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"‎      cmd.ExecuteNonQuery()‎      cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = ‎'Cell I4'"‎      cmd.ExecuteNonQuery()‎      conn.Close()‎End SubPublic Sub Use_External_Source()‎      ‎' Open a connection to the sample Northwind Access database.‎      Dim conn As New System.Data.OleDb.OleDbConnection( _‎            ‎"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")‎      conn.Open()‎      Dim cmd As New System.Data.OleDb.OleDbCommand()‎      cmd.Connection = conn'=======================================================================      ‎' Run an INSERT..INTO command on the Northwind database to append       ‎' the records from a table/query to an existing table in the Excel       ‎' workbook.‎'=======================================================================      cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _         "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"      cmd.ExecuteNonQuery()'==========================================================================      ‎' Run a SELECT..INTO command on the Northwind database to insert       ‎' all the records from a table/query into a new sheet in the Excel       ‎' workbook.‎'==========================================================================      cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _                      ‎"FROM [Product Sales for 1997]"‎      cmd.ExecuteNonQuery()‎      conn.Close()‎End Sub
  7. قم بتعديل مسار نموذج قاعدة بيانات Access، Northwind لعضو m_sNorthwind في التعليمة البرمجية، إذا لزم الأمر.
عودة إلى الأعلى

تجربة

  1. من القائمة View (عرض)، أشر إلى Other Windows (إطارات أخرى)، ثم انقر فوق Output (إخراج) لعرض الإطار Output (إخراج).
  2. اضغط F5 لإنشاء البرنامج وتشغيله.
  3. انقر فوق Create_Workbook، ثم انقر فوق Go (انتقال). يقوم الإجراء Create_Workbook بتشغيل أوامر CREATE TABLE لإنشاء مصنفين جديدين: C:\ExcelData1.xls وC:\ExcelData2.xls. يحتوي المصنف ExcelData1.xls على ورقة واحدة (جدول) باسم EmployeeData، ويحتوي المصنف ExcelData2.xls على ورقة واحدة (جدول) باسم InventoryData. ويتم ملء الجداول بالسجلات.

    ملاحظة: في كل خطوة متبقية من هذا الاختبار، قم بفتح المصنفات في برنامج Excel لفحص النتائج. أو، انقر فوق Retrieve_Records لعرض محتويات الجدول (الجداول) الموجودة في الإطار Output (إخراج) الخاص بـ Visual Studio .NET.
  4. انقر فوق Retrieve_Records، ثم انقر فوق Go (انتقال). يقوم الإجراء Retrieve_Records باستخراج السجلات من الجداول ويقوم بعرضها في الإطار Output (إخراج)، وتكون مشابهة لما يلي:
    EmployeeData:=============AAA       Andrew         12/4/1955InventoryData:==============Cola           200   1.35Chips          550   0.89
  5. انقر فوق Add_Records، ثم انقر فوق Go (انتقال). يقوم الروتين Add_Records بإضافة سجلين لكل جدول:
    EmployeeData:=============AAA       Andrew         12/4/1955CCC       Charlie        10/14/1948DDD       Deloris        7/19/1998InventoryData:==============Cola           200   1.35Chips          550   0.89Bread          390   1.89Milk           99    2.59
  6. انقر فوق Update_Records، ثم انقر فوق Go (انتقال). يقوم الروتين Update_Records بتحديث سجلين في كل مصنف:
    EmployeeData:=============AAA       Aaron          5/4/1975CCC       Charlie        10/14/1948DDD       Deloris        7/19/1998InventoryData:==============Cola           1000  10.1Chips          2000  20.2Bread          390   1.89Milk           99    2.59
  7. انقر فوق Update_Individual_Cells، ثم انقر فوق Go (انتقال). يقوم الروتين Update_Individual_Cells بتعديل خلايا محددة في ورقة العمل EmployeeData في ExcelData1.xls؛ وعلى وجه التحديد، يتم تحديث الخلايا F3 وG3 وI4.
  8. انقر فوق Use_External_Source، ثم انقر فوق Go (انتقال). عند استخدام الأمر INSERT..INTO، يقوم الروتين Use_External_Source بإلحاق السجلات من جدول Northwind باسم 'Employees' إلى ورقة العمل EmployeeData في ExcelData1.xls. ويستخدم Use_External_Source الأمر SELECT..INTO لإنشاء جدول جديد (أو ورقة) في ExcelData2.xls الذي يحتوي على كافة السجلات من جدول Northwind باسم 'Products'.

    ملاحظة: في حالة النقر فوق Use_External_Source أكثر من مرة، سيتم إلحاق القائمة Employees عدة مرات بسبب عدم التعرف على المفتاح الأساسي أو عدم فرضه.
عودة إلى الأعلى

تنسيق الخلايا

في حالة استخدام ADO.NET لإضافة سجلات أو تحديثها في مصنف موجود بالفعل، يمكنك تطبيق تنسيق الخلايا على المصنف الذي سيتم استخدامه مع السجلات المُحدّثة أو الجديدة. عند تحديث سجل (أو صف) موجود بالفعل في مصنف، يتم الاحتفاظ بتنسيق الخلايا. وعند إدراج سجل (أو صف) جديد في مصنف، يرث السجل الجديد التنسيق من الصف الذي يعلوه.

ويوضح الإجراء التالي كيفية استخدام التنسيق في مصنف بنموذج التعليمة البرمجية:
  1. اضغط F5 لإنشاء النموذج وتشغيله.
  2. في Form1، انقر فوق Create_Workbook، ثم انقر فوق Go (انتقال).
  3. قم ببدء تشغيل برنامج Microsoft Excel وفتح C:\ExcelData1.xls.
  4. قم بتطبيق نمط خط غامق على الخلية A2.
  5. قم بتطبيق نمط تسطير مائل على الخلية B2 وقم بالمحاذاة إلى الوسط.
  6. قم بتطبيق تنسيق تاريخ طويل على الخلية C2.
  7. قم بحفظ C:\ExcelData1.xls وإغلاقه.
  8. في Form1، انقر فوق Add_Records، ثم انقر فوق Go (انتقال).
  9. قم بفتح C:\ExcelData1.xls في برنامج Excel ولاحظ وراثة الصفين الجديدين لتنسيق الصف الأول.
عودة إلى الأعلى

القيود

فيما يلي بعض قيود موفر Jet OLE DB فيما يتعلق بمصادر بيانات Excel:
  • لا يمكنك إدراج صيغ في الخلايا باستخدام ADO.NET.
  • لا يتمكن موفر Jet OLE DB من توفير معلومات فهرس/مفتاح للجداول في مصنف Excel. ولهذا السبب، لا يمكنك استخدام CommandBuilder لإنشاء تحديثات وعمليات إدراج تلقائيًا للسجلات في مصنف Excel.
عودة إلى الأعلى
مراجع
للحصول على معلومات إضافية، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة معارف Microsoft" (قد تحتوي هذه المقالات على ارتباطات إلى محتوى باللغة الإنجليزية (محتوى لم تتم ترجمته بعد)):
316756 المشكلة: ظهور رسائل خطأ عند محاولة استخدام ADO.NET OLEDbDataAdapter لتعديل مصنف Excel
257819 كيفية استخدام ADO مع بيانات Excel من Visual Basic أو VBA
306022 كيفية نقل البيانات إلى مصنف Excel باستخدام Visual Basic .NET
306023 كيفية نقل البيانات إلى مصنف Excel باستخدام Visual C# 2005 أو Visual C# .NET
311731 كيفية الاستعلام عن بيانات Excel وعرضها باستخدام ASP.NET وADO.NET وVisual Basic .NET
306572 كيفية الاستعلام عن بيانات Excel وعرضها باستخدام ASP.NET وADO.NET وVisual C# .NET
278973 شرح ExcelADO لكيفية استخدام ADO لقراءة البيانات وكتابتها في مصنفات Excel

عودة إلى الأعلى
خصائص

رقم الموضوع: 316934 - آخر مراجعة: 12/29/2007 11:31:00 - المراجعة: 7.1

  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • kbhowtomaster KB316934
تعليقات