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

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

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

  • 相关阅读:
    小米6刷机开启root权限
    C标准库堆内存函数
    UE4打印到HUD的Stat命令
    Blueprint Stats插件
    PC与Mobile硬件架构对比
    atomic原子编程中的Memory Order
    Windows10下开启D3D11的Debug Layer
    【数据结构】树存储结构
    【数据结构】哈希表
    【算法】查找算法
  • 原文地址:https://www.cnblogs.com/liuruitao/p/5087900.html
Copyright © 2011-2022 走看看