zoukankan      html  css  js  c++  java
  • 使用c#获取access中所有表的表名与内容

    以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源。

    这里用到了OleDbConnection两个方法:

    GetSchema

    GetOleDbSchemaTable

    看MSDN的帮助,写的很不清楚,还是用代码来说话吧。

    1、获取OLEDB连接的架构

    [c-sharp] view plaincopy
    1. conn.Open();  
    2. DataTable cnSch = conn.GetSchema();  

    返回的结果为一个DataTable,如下:

    MetaDataCollections 0 0
    DataSourceInformation 0 0
    DataTypes 0 0
    Restrictions 0 0
    ReservedWords 0 0
    Columns 4 4
    Indexes 5 4
    Procedures 4 3
    Tables 4 3
    Views 3 3

    (列名复制不过来,图又没办法贴,就这样意思一下吧)

    2、然后可以指定读取其中的内容,比如读取所有表的信息。

    [c-sharp] view plaincopy
    1. DataTable tbl = conn.GetSchema("tables");  
    2. dgv1.DataSource = tbl;  

    返回的结果如下:

    TABLE_NAME TABLE_TYPE

    detail TABLE
    detail1 TABLE
    mainTask TABLE
    MSysAccessStorage ACCESS TABLE
    MSysAccessXML ACCESS TABLE
    MSysACEs SYSTEM TABLE
    MSysNavPaneGroupCategories ACCESS TABLE
    MSysNavPaneGroups ACCESS TABLE
    MSysNavPaneGroupToObjects ACCESS TABLE
    MSysNavPaneObjectIDs ACCESS TABLE
    MSysObjects SYSTEM TABLE
    MSysQueries SYSTEM TABLE
    MSysRelationships SYSTEM TABLE
    Query1 VIEW
    TagAccessLog TABLE
    testDetail TABLE
    testLog TABLE
    testMain TABLE
    testTask TABLE

    3、继续,读取某张表的列信息,比如读取mainTask表的信息:

    [c-sharp] view plaincopy
    1. DataTable colTbl = conn.GetSchema("columns", new string[] { null, null, "mainTask" });  
    2.  dgvCn.DataSource=colTbl;  

    返回结果部分列内容:

    TABLE_NAME COLUMN_NAME

    mainTask catalog
    mainTask content
    mainTask crdate
    mainTask Emergency
    mainTask endDate
    mainTask fnrate
    mainTask level
    mainTask mainID
    mainTask startDate
    mainTask tags
    mainTask title
    mainTask memo
    mainTask memo2

    4、然后可以尝试用另一个方法来读取表信息:

    [c-sharp] view plaincopy
    1. DataTable tblSch = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);  
    2. DataView view = tblSch.DefaultView;  
    3. view.RowFilter = "table_type='table' or table_type='view'";  
    4.   
    5.   
    6. cmbTblList.SelectedIndexChanged -= cmbTblList_SelectedIndexChanged;  
    7. cmbTblList.DataSource = view;  
    8. cmbTblList.DisplayMember = "Table_Name";  
    9. cmbTblList.SelectedIndexChanged += cmbTblList_SelectedIndexChanged;  
    10.   
    11. dgvSch.DataSource = view;  
    12. dgv1.DataSource = tblSch;  

    返回结果:

    detail TABLE
    detail1 TABLE
    mainTask TABLE
    Query1 VIEW
    TagAccessLog TABLE
    testDetail TABLE
    testLog TABLE
    testMain TABLE
    testTask TABLE

    嗯,差不多该取的信息都有了,尤其是取字段的信息,非常的详细。

    正好有这个需求,网上找了好久才找到这个合适的。亲测能用。

  • 相关阅读:
    内存使用过高点检checklist
    Ubuntu linux系统下 su:出现: authentication failure的解决办法
    static完全解析
    C语言开发规范
    单片机、ARM、PC程序执行介质区别
    2021来了,一份小菜鸡的2020总结!
    Linux命令进阶篇-文件查看与查找
    LINUX常用命令(二)
    Linux常用命令(一)
    百钱百鸡
  • 原文地址:https://www.cnblogs.com/liuruitao/p/5087900.html
Copyright © 2011-2022 走看看