zoukankan      html  css  js  c++  java
  • C#获取Excel架构信息的方法

    C#获取Excel架构信息的方法

    使用OleDbConnection.GetOleDbSchemaTable方法可以获取待检索数据源的架构信息,常使用方法如下:

    DataTable Schemadt = OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new[] { null, null, null, "table" }); 

    查看Schemadt内数据方法

    for (int i = 0; i < Schemadt.Rows.Count; i++)

     {

    Console.WriteLine("SheetName=" + Schemadt.Rows[i]["TABLE_NAME"].ToString());

     } 

    注意:SqlClient.SqlConnection 对象没有与GetOleDbSchemaTable 等价的方法。

    下面解释一下GetOleDbSchemaTable 这个方法 

    OLE DB .NET 数据提供程序使用 OleDbConnection 对象的 GetOleDbSchemaTable 方法展示架构信息。GetOleDbSchemaTable 返回填充了架构信息的 DataTable
        GetOleDbSchemaTable 的第一个参数是架构参数,它是一个 OleDbSchemaGuid 类型的标识,指定了要返回的架构信息的类型(如表、列和主键)。第二个参数是一个限制对象数组,对 DataTable 架构中返回的行进行过滤(例如,您可以指定对表的名称、类型、所有者和/或架构的限制)。


    OleDbSchemaGuid 成员
    OleDbSchemaGuid 参数指定 GetOleDbSchemaTable 方法要返回的架构表的类型。 
    OleDbSchemaGuid 成员主要包括:

    外键
    索引
    主键
    视图

     

    限制

        限制是一个过滤值对象数组,每个元素对应于结果 DataTable 中的一个 DataColumnOleDbSchemaGuid 参数决定了相应的限制。例如,在指定表的 OleDbSchemaGuid 时,限制数组如下所示:

    {TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE}

         在传递限制数组的值时,对于不包含值的数组元素使用 Visual C# .NET 的 null 关键字。例如,如果要检索表的架构,使用OleDbSchemaGuid.Tables。但是,如果指定了表,也将返回别名、同义词、视图和其他相关对象。因此,如果您希望过滤掉除表以外的所有其他对象,请对 TABLE_TYPE 使用 TABLE 限制。可以对 TABLE_CATALOG、TABLE_SCHEMA 和 TABLE_NAME 使用 null,因为您不过滤这些对象:schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
    new Object[] {null, null, null, "TABLE"});

     

    返回的数据表

        每个符合 OleDbSchemaGuid 类型和限制规则的对象都对应于 GetOleDbSchemaTable 方法返回的 DataTable 中的一行。每个限制列对应于DataTable 的一列,后面是基于 OleDbSchemaGuid 字段的其他架构信息。
    例如,当您使用以下代码时,返回的 DataTable 的每一行是一个数据库表: 
    schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
    new Object[] {null, null, null, "TABLE"});

     

        DataTable 中返回的每一列是限制列(TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE),后面是 TABLE_GUID、DESCRIPTION、TABLE_PROPID、DATE_CREATED 和 DATE_MODIFIED 的其他架构列。

        若要获得列名称的列表(即字段描述符,如 TABLE_CATALOG、TABLE_SCHEMA 和 TABLE_NAME),您可以使用列的位置顺序。注意 Columns 数组的元素下标是从 0 开始的: 
    for (int i = 0; i < schemaTable.Columns.Count; i++) {
    Console.WriteLine(schemaTable.Columns[i].ToString());
    }

        若要获得每一列的值(即实际的表名称,如 Categories、Customers 和 Employees),您可以使用该行的 ItemArray 的位置顺序。注意 ItemArray数组的元素下标是从 0 开始的: 
    for (int i = 0; i < schemaTable.Rows.Count; i++) {
    Console.WriteLine(schemaTable.Rows[i].ItemArray[2].ToString());

    }

    希望对大家能有所帮助。

  • 相关阅读:
    修改nuget包默认存放路径,避免增加C盘的负担
    .Net Core 3.0 (一):安装Vs2019
    .NET Core 学习资料
    SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
    MySql 时间查询
    如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
    SqlServer 获取工作日(周六、周日休息,周六日不休息,周六不休息)
    SQL Server 删除数据库中表数据
    SQL Server 删除数据库所有表和所有存储过程
    摘要
  • 原文地址:https://www.cnblogs.com/advocate/p/1710383.html
Copyright © 2011-2022 走看看