使用c#獲取access中所有表的表名與內容
以前在網上查過,似乎也可以通過讀取access系統表的方法來獲得,但是實在想不想來是什么,今天又在網上找了找,終于發現更加方便的方法,更重要的是, 這種方法也可以通用所有OLEDB數據源。
這里用到了OleDbConnection兩個方法:
GetSchema
GetOleDbSchemaTable
看MSDN的幫助,寫的很不清楚,還是用代碼來說話吧。
1、獲取OLEDB連接的架構
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、然后可以指定讀取其中的內容,比如讀取所有表的信息。
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表的信息:
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 |
4、然后可以嘗試用另一個方法來讀取表信息:
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 |
嗯,差不多該取的信息都有了,尤其是取字段的信息,非常的詳細。
正好有這個需求,網上找了好久才找到這個合適的。親測能用。