使用c#获取access中所有表的表名与内容
2015-12-30 10:12
633 查看
以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源。
这里用到了OleDbConnection两个方法:
GetSchema
GetOleDbSchemaTable
看MSDN的帮助,写的很不清楚,还是用代码来说话吧。
1、获取OLEDB连接的架构
[c-sharp] view plaincopy
conn.Open();
DataTable cnSch = conn.GetSchema();
返回的结果为一个DataTable,如下:
(列名复制不过来,图又没办法贴,就这样意思一下吧)
2、然后可以指定读取其中的内容,比如读取所有表的信息。
[c-sharp] view plaincopy
DataTable tbl = conn.GetSchema("tables");
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
DataTable colTbl = conn.GetSchema("columns", new string[] { null, null, "mainTask" });
dgvCn.DataSource=colTbl;
返回结果部分列内容:
TABLE_NAME COLUMN_NAME
4、然后可以尝试用另一个方法来读取表信息:
[c-sharp] view plaincopy
DataTable tblSch = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
DataView view = tblSch.DefaultView;
view.RowFilter = "table_type='table' or table_type='view'";
cmbTblList.SelectedIndexChanged -= cmbTblList_SelectedIndexChanged;
cmbTblList.DataSource = view;
cmbTblList.DisplayMember = "Table_Name";
cmbTblList.SelectedIndexChanged += cmbTblList_SelectedIndexChanged;
dgvSch.DataSource = view;
dgv1.DataSource = tblSch;
返回结果:
嗯,差不多该取的信息都有了,尤其是取字段的信息,非常的详细。
正好有这个需求,网上找了好久才找到这个合适的。亲测能用。
这里用到了OleDbConnection两个方法:
GetSchema
GetOleDbSchemaTable
看MSDN的帮助,写的很不清楚,还是用代码来说话吧。
1、获取OLEDB连接的架构
[c-sharp] view plaincopy
conn.Open();
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
DataTable tbl = conn.GetSchema("tables");
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
DataTable colTbl = conn.GetSchema("columns", new string[] { null, null, "mainTask" });
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 |
[c-sharp] view plaincopy
DataTable tblSch = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
DataView view = tblSch.DefaultView;
view.RowFilter = "table_type='table' or table_type='view'";
cmbTblList.SelectedIndexChanged -= cmbTblList_SelectedIndexChanged;
cmbTblList.DataSource = view;
cmbTblList.DisplayMember = "Table_Name";
cmbTblList.SelectedIndexChanged += cmbTblList_SelectedIndexChanged;
dgvSch.DataSource = view;
dgv1.DataSource = tblSch;
返回结果:
detail | TABLE |
detail1 | TABLE |
mainTask | TABLE |
Query1 | VIEW |
TagAccessLog | TABLE |
testDetail | TABLE |
testLog | TABLE |
testMain | TABLE |
testTask | TABLE |
正好有这个需求,网上找了好久才找到这个合适的。亲测能用。
相关文章推荐
- C# 条形码操作【源码下载】
- c#老化测试程序
- C#写入TXT文档时 列对齐
- C# WPD PortableDeviceApiLib获取便携设备列表
- C# 多线程,论多核时代爱恨情仇
- 关于道格拉斯算法的一些思考
- C#实现对鼠标的操作
- C# 32位程序访问64位注册表
- C#定时器的实现
- 浅谈C#委托
- 【VS调试】C#读写Windows 7注册表时抛出“不允许所请求的注册表访问权”的解决办法
- C#难点逐个击破3params数组参数
- C#难点逐个击破2out返回参数
- 关于64位操作系统使用C#访问注册表失败的问题
- C#之数组与集合
- C# winform 编写一键排班软件时遇到的问题
- C# winform Datagridview 标题居中
- C# BackgroundWorker 异步控件 Demo示例
- c#window服务程序
- [.NET源码] C#制作的一套在线更新软件系统