您的位置:首页 > 运维架构 > 网站架构

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

2010-10-28 16:21 519 查看
C#获取Excel架构信息的方法

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

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

查看Schemadt内数据方法

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

{

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

}

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

下面解释一下GetOleDbSchemaTable这个方法

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

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


外键
索引
主键
视图

限制

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



返回的数据表

每个符合OleDbSchemaGuid类型和限制规则的对象都对应于GetOleDbSchemaTable方法返回的DataTable中的一行。每个限制列对应于DataTable的一列,后面是基于OleDbSchemaGuid字段的其他架构信息。
例如,当您使用以下代码时,返回的DataTable的每一行是一个数据库表:
schemaTable=cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, newObject[]{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(inti=0;i<schemaTable.Columns.Count;i++){
Console.WriteLine(schemaTable.Columns[i].ToString());
}

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


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: