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

HOW TO: استرداد بيانات التعريف من Excel عن طريق استخدام أسلوب GetOleDbSchemaTable في Visual Basic .NET

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

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

في هذه المهمة

الموجز
توضح هذه المقالة خطوة بخطوة حول كيفية استرداد بيانات تعريف الجدول والعمود من مصادر بيانات Microsoft Excel بواسطة استخدام الأسلوب GetOleDbSchemaTable مع موفر Microsoft OLE DB مدارة و موفر Microsoft OLE DB لـ Jet.

أسلوب GetOleDbSchemaTable التي يتم عرضها بواسطة الفئة System.Data.OleDb Microsoft .NET Framework هو اللاحقة .NET إلى الأسلوب OpenSchema في الإصدارات السابقة من Microsoft كائنات بيانات ActiveX (ADO).

back to the top

وصف تقنية

بعد الاتصال بمصدر بيانات Excel باستخدام ADO.NET استخراج قائمة من بيانات تعريف الجدول باستخدام GetOleDbSchemaTable ثم قم باستخدام نفس الأسلوب وسائط مختلفة للحصول على بيانات تعريف العمود للجدول المحدد. يمكنك أيضاً استخدام كائن DataGridTableStyle لتخطيط نتائج الاستعلام في شبكة بيانات وتنسيقها.

back to the top

متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة و حزم الخدمات يجب:
  • Visual Studio .NET المثبت على نظام تشغيل Microsoft Windows متوافق
  • ملف المصنف (.xls) Microsoft Excel واحد على الأقل مع بعض الصفوف والأعمدة من البيانات
تفترض هذه المقالة وجود بأزرار الأساسية على الأقل مع المواضيع التالية:
  • Visual Basic .NET
  • الوصول إلى البيانات ADO.NET
  • مصنفات Excel وأوراق العمل
back to the top

نموذج

  1. ابدأ تشغيل Microsoft Visual Studio .NET ثم إنشاء مشروع Visual Basic تطبيق Windows .NET جديد.
  2. إضافة عناصر تحكم زر ثلاثة عنصري تحكم DataGrid النموذج الافتراضي (Form1). قم بتغيير الخاصية Text عناصر تحكم زر إلى استرداد بيانات التعريف "،" قائمة الجداول تنسيق "و" قائمة أعمدة تنسيق على التوالي.
  3. التبديل إلى الوحدة النمطية للتعليمات البرمجية الخاصة بالنموذج وإضافة عبارات عمليات الاستيراد التالية في الجزء العلوي:
    Imports System.DataImports System.Data.OleDbImports System.ComponentModel
  4. إدراج التعريفات مستوى الوحدة النمطية التالي في فئة النموذج بعد سطر "System.Windows.Forms.Form يرث". ضبط سلسلة الاتصال الضرورة للإشارة إلى ملف مصنف Excel الذي يحتوي على بعض الصفوف والأعمدة من البيانات.
        Dim cn As OleDbConnection    Dim strCn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _            "Data Source=c:\test.xls;Extended Properties=Excel 8.0"    Dim dtTables As DataTable    Dim WithEvents cm As CurrencyManager    Dim dtColumns As DataTable    Dim dvColumns As DataView
  5. أدخل التعليمة البرمجية التالية في فئة النموذج بعد المنطقة "مصمم نماذج Windows إنشاء التعليمات البرمجية". هذه التعليمة البرمجية يستدعي GetOleDbSchemaTable تحميل قوائم الجدول والأعمدة بملء عناصر التحكم DataGrid و بتحديث قائمة الأعمدة عند تغيير الجدول المحدد.
        Private Sub Button1_Click(ByVal sender As System.Object, _            ByVal e As System.EventArgs) Handles Button1.Click        Call GetTablesList()    End Sub    Private Sub GetTablesList()        cn = New OleDbConnection(strCn)        cn.Open()        dtTables = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)        DataGrid1.DataSource = dtTables        DataGrid1.ReadOnly = True        cn.Close()        Call GetColumnsList()    End Sub    Private Sub GetColumnsList()        If cm Is Nothing Then            cm = CType(Me.BindingContext(dtTables), CurrencyManager)        End If        Dim r As Integer = cm.Position        Dim strTable As String = dtTables.Rows(r)("TABLE_NAME")        cn = New OleDbConnection(strCn)        cn.Open()        dtColumns = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, _            New Object() {Nothing, Nothing, strTable, Nothing})        dvColumns = New DataView(dtColumns)        dvColumns.Sort = "ORDINAL_POSITION"        DataGrid2.DataSource = dvColumns        DataGrid2.ReadOnly = True        cn.Close()    End Sub    Private Sub cm_PositionChanged(ByVal sender As Object, _            ByVal e As System.EventArgs) Handles cm.PositionChanged        Call GetColumnsList()    End Sub
  6. إدراج التعليمات البرمجية التالية لتخطيط جداول DataGrid وتنسيقه باستخدام TableStyles. لاحظ استخدام PropertyDescriptor لتسهيل غير افتراضي تنسيق الأعمدة تاريخ.
        Private Sub Button2_Click(ByVal sender As System.Object, _            ByVal e As System.EventArgs) Handles Button2.Click        Call FormatTablesGrid(dtTables)    End Sub    Private Sub FormatTablesGrid(ByVal dt2format As DataTable)        Dim gs As DataGridTableStyle = New DataGridTableStyle()        gs.MappingName = dt2format.TableName        Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()        With cs            .MappingName = "TABLE_NAME"            .HeaderText = "Table Name"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        cs = New DataGridTextBoxColumn()        With cs            .MappingName = "TABLE_TYPE"            .HeaderText = "Table Type"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        Dim cm As CurrencyManager = CType(Me.BindingContext(dt2format), CurrencyManager)        Dim pd As PropertyDescriptor = cm.GetItemProperties()("DATE_CREATED")        cs = New DataGridTextBoxColumn(pd, "d")        With cs            .MappingName = "DATE_CREATED"            .HeaderText = "Date Created"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        cm = CType(Me.BindingContext(dt2format), CurrencyManager)        pd = cm.GetItemProperties()("DATE_MODIFIED")        cs = New DataGridTextBoxColumn(pd, "d")        With cs            .MappingName = "DATE_MODIFIED"            .HeaderText = "Date Modified"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        DataGrid1.TableStyles.Add(gs)        Me.Button2.Enabled = False    End Sub
  7. إدراج التعليمات البرمجية التالية تخطيط وتنسيق الأعمدة DataGrid باستخدام TableStyle:
        Private Sub Button3_Click(ByVal sender As System.Object, _            ByVal e As System.EventArgs) Handles Button3.Click        Call FormatColumnsGrid(dtColumns)    End Sub    Private Sub FormatColumnsGrid(ByVal dt2format As DataTable)        Dim gs As DataGridTableStyle = New DataGridTableStyle()        gs.MappingName = dtColumns.TableName        Dim cs As DataGridColumnStyle = New DataGridTextBoxColumn()        With cs            .MappingName = "COLUMN_NAME"            .HeaderText = "Column Name"            .Width = 100        End With        gs.GridColumnStyles.Add(cs)        cs = New DataGridTextBoxColumn()        With cs            .MappingName = "ORDINAL_POSITION"            .HeaderText = "Ordinal Position"            .Width = 100        End With        gs.GridColumnStyles.Add(cs)        cs = New DataGridTextBoxColumn()        With cs            .MappingName = "DATA_TYPE"            .HeaderText = "Data Type"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        cs = New DataGridTextBoxColumn()        With cs            .MappingName = "CHARACTER_MAXIMUM_LENGTH"            .HeaderText = "Text Length"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        cs = New DataGridTextBoxColumn()        With cs            .MappingName = "NUMERIC_PRECISION"            .HeaderText = "Numeric Precision"            .Width = 75        End With        gs.GridColumnStyles.Add(cs)        DataGrid2.TableStyles.Add(gs)        Me.Button3.Enabled = False    End Sub
  8. تشغيل المشروع.
  9. انقر فوق استرداد بيانات التعريف لتعبئة القائمة جداول (DataGrid1) مع كافة أعمدة المعلومات التي تم إرجاعها لكل جدول في مصنف Excel بواسطة GetOleDbSchemaTable. يتم تعبئة القائمة الأعمدة (DataGrid2) في نفس الوقت مع كافة أعمدة المعلومات التي يتم إرجاعها الأعمدة في الجدول الأول في القائمة جداول.
  10. حدد جدول مختلف في القائمة جداول. تغييرات قائمة أعمدة لعرض الأعمدة من الجدول المحدد لوجود معالج الأحداث cm_PositionChanged التي يمكنك تنفيذها.
  11. انقر فوق تنسيق قائمة الجداول لتعريف ثم تطبيق TableMappingStyle DataGrid1. هذا يجعل رؤوس الأعمدة "المألوف" أكثر ويعرض أربعة أعمدة بيانات مفيدة من أعمدة تسعة التي تم إرجاعها بواسطة GetOleDbSchemaTable. يتم عرض هذه الأعمدة:
    table_name
    table_type
    date_created
    date_modified
    لا يتم عرض هذه الأعمدة الفراغات:
    table_catalog
    table_schema
    table_guid
    وصف
    table_propid
  12. انقر فوق تنسيق قائمة أعمدة لتعريف و لتطبيق TableMappingStyle DataGrid2. هذا يجعل رؤوس الأعمدة "المألوف" أكثر ويعرض 5 مفيدة الأعمدة فقط من البيانات من أعمدة 28 التي تم إرجاعها بواسطة GetOleDbSchemaTable.
    column_name
    ordinal_position
    data_type
    maximum_character_length
    numeric_precision
    لا يتم عرض هذه الأعمدة الفارغة غالبًا:
    table_catalog
    table_schema
    TABLE_NAME (المعروف مسبقاً)
    column_guid
    column_propid
    COLUMN_HASDEFAULT (false دوماً)
    column_default
    column_flags
    IS_NULLABLE (دوماً حقيقي)
    type_guid
    character_octet_length
    numeric_scale
    datetime_precision
    character_set_catalog
    character_set_schema
    character_set_name
    collation_catalog
    collation_schema
    collation_name
    domain_catalog
    domain_schema
    اسم_المجال
    وصف
  13. انقر فوق صف مختلف في DataGrid1 لتحديد جدول مختلف. يتم تحديث القائمة الأعمدة تلقائياً. تظل TableStyles الذي قمت بتطبيقه مسبقاً على كل DataGrid نافذة المفعول.
back to the top

استكشاف الأخطاء وإصلاحها

  • أنواع بيانات الأعمدة التي يتم إرجاعها بواسطة GetOleDbSchemaTable بمصدر بيانات Excel غير متطابقة في كافة الحالات إلى أنواع البيانات التي تم إرجاعها بواسطة الأسلوب OpenSchema في ADO التقليدية:
    نوع العمودADO الكلاسيكيةADO.NET (OLE قاعدة بيانات)
    الرقمية5 adDouble5 OleDbType.Double
    عملة6 adCurrency6 OleDbType.Currency
    تاريخ/وقت7 adDate7 OleDbType.Date
    منطقي11 adBoolean11 OleDbType.Boolean
    النص < 255202 adVarWChar130 OleDbType.WChar
    المذكرة203 adLongVarWChar130 OleDbType.WChar
  • إرجاع GetOleDbSchemaTable, مثل OpenSchema عمود مفرد "F1" من فارغ ورقة عمل Excel ، على الرغم من وجود في الواقع لا يوجد عناوين البيانات أو الأعمدة.
back to the top
مراجع
للحصول على معلومات إضافية، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
257819HOWTO: استخدام ADO مع بيانات Excel من Visual Basic أو VBA
back to the top

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

خصائص

رقم الموضوع: 318373 - آخر مراجعة: 09/03/2003 22:57:40 - المراجعة: 2.1

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

  • kbmt kbhowtomaster kbprovider KB318373 KbMtar
تعليقات
/html>;did=1&t=">