首先说明,获取数据库的表明,有对应的SQL语句,例如access数据库:select name from accesssysobjects Where XType='U'
然后在C#写一个读取数据库的类,里面写个方法,用这个SQL语句读取表名,就可以
我也不太懂你说的通过adonet获取,只是难道不是直接连接数据库读取表名吗??
用sql获取数据库中所有的表名的方法:
1、oracle下:select
table_name
from
all_tables;
2、MySQL下:select
table_name
from
information_schematables
where
table_schema='csdb'
and
table_type='base
table';
3、sql
server下:select
name
from
systables
go
//C#获取Access数据库中的所有表名和列名
string ConnectionString = "Provider=MicrosoftJetOLEDB40;" + @"Data Source=E:\report20100819\report20100819mdb"; OleDbConnection Conn = new OleDbConnection(ConnectionString); ConnOpen();DataTable shemaTable = ConnGetOleDbSchemaTable(OleDbSchemaGuidTables, new object[] { null, null, null, "TABLE" }); foreach (DataRow dr in shemaTableRows) { ConsoleWriteLine(dr["TABLE_NAME"]); DataTable columnTable = ConnGetOleDbSchemaTable(OleDbSchemaGuidColumns, new object[] { null, null, dr["TABLE_NAME"]ToString(), null }); foreach (DataRow dr2 in columnTableRows) { ConsoleWriteLine(dr2["COLUMN_NAME"]); } } ConnClose();
看来lz并没有认真看api文档啊,在接口connection中有一个getmetadata()函数,其返回值是接口databasemetadata,里面有各种数据库的配置信息,如是否支持空、最大连接数、用户可以调用的所有存储过程等,其中包括getschemas()-获取所有模式,gettables(),获取所有的表,根据输入的不同参数可以获取所有表或者其中某个模式的表,还包括表的注射等信息,getcolumns()则是获取表的具体字段,这些函数大多是以resultset的形式返回,和一般的jdbc使用差不多,lz慢慢研究研究吧
SELECT
table_name AS `表名`,
table_type AS `类型`,
engine AS `引擎`,
VERSION AS `版本`,
TABLE_COLLATION AS `字符集`
FROM
information_schematables
WHERE
table_schema = 'test'
ORDER BY
table_name DESC;
+------------------+------------+--------+------+-------------------+
| 表名 | 类型 | 引擎 | 版本 | 字符集 |
+------------------+------------+--------+------+-------------------+
| test_sub_student | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| test_sub2 | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| test_sub | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| test_rollup_1 | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| test_main_class | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| test_main2 | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| test_main | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| testuser | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| td_testsalary | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| sale_report | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
| log_table | BASE TABLE | InnoDB | 10 | latin1_swedish_ci |
+------------------+------------+--------+------+-------------------+
11 rows in set (000 sec)
推荐两种方法给你,下面两个例子都可以将ACCESS数据库中的全部表名写入列表框,请更换为实际数据库路径名,供楼主参考
方法一
Private Sub Form_Load()
Dim cn As New ADODBConnection '声明并实例化一个ADO连接对象
Dim cnStr As String '声明一个连接字符串变量
Dim rsSchema As New ADODBRecordset '声明并实例化一个记录集对象
'设置连接当前目录下“MyAccessmdb”之连接字符串
cnStr = "Provider=MicrosoftJetOLEDB40;Data Source=" & AppPath & "\MyAccessmdb;Persist Security Info=False;"
cnOpen cnStr '打开与该数据库的连接
Set rsSchema = cnOpenSchema(adSchemaTables) '打开数据库所有表记录集
'循环将所有表名逐个写入列表框
Do Until rsSchemaEOF
If rsSchema!TABLE_TYPE = "TABLE" Then
List1AddItem rsSchema!TABLE_NAME
End If
rsSchemaMoveNext
Loop
rsSchemaClose '关闭记录集
Set rsSchema= Nothing '释放记录集对象
cnClose '关闭连接
Set cn = Nothing '释放连接对象
End Sub
方法二(
ACCESS数据库系统表"MsysObjects"里存放着所有数据表的资料,但是其访问权限默认为不开放。如果不嫌设置ACCESS数据库系统表权限麻烦,下列VB代码可以直接读取"MsysObjects"里记载的已保存表名信息,并于窗体加载时将得到的全部表名写入列表框里。
首先要设置读取ACCESS数据库系统表"MsysObjects"的权限,方法如下:
打开ACCESS数据库-->菜单-->工具-->选项 打开选项对话框,于视图选项卡 勾选“系统对象”点击“确定”按钮;
跟着,菜单-->工具-->安全-->用户与组权限 打开“用户与组权限”对话框,于权限选项卡 选择 “管理员、"MsysObjects"表 于权限框勾选“读取数据”点击“确定”按钮。
注意为了确保ACCESS数据库的安全,设置完权限后,应将系统对象重新隐藏。
菜单-->工具-->选项 打开选项对话框,于视图选项卡 取消勾选“系统对象”
点击“确定”按钮。
Private Sub Form_Load()
Dim cn As New ADODBConnection '声明并实例化一个ADO连接对象
Dim cnStr As String '声明一个连接字符串变量
Dim rs As New ADODBRecordset '声明并实例化一个记录集对象
Dim sqlStr As String '声明一个SQL查询字符串变量
'设置连接当前目录下“MyAccessmdb”之连接字符串
cnStr = "Provider=MicrosoftJetOLEDB40;Data Source=" & AppPath & "\MyAccessmdb;Persist Security Info=False;"
cnOpen cnStr '打开与该数据库的连接
rsCursorLocation = adUseClient '设置为客户端游标
'设置查询表名列表之SQL语句
sqlStr = "select Name from MsysObjects where type=1 and Flags=0"
rsOpen sqlStr, cn '打开数据库表记录集
'因为直接读取“MsysObjects“得到的表名列表秩序混乱,故这里强制对表名进行排序
rsSort = "Name ASC"
'循环逐个将表名放置到列表框里
Do Until rsEOF
List1AddItem rs!Name
rsMoveNext
Loop
rsClose '关闭记录集
Set rs = Nothing '释放记录集对象
cnClose '关闭连接
Set cn = Nothing '释放连接对象
End Sub
以上内容源自本人百度空间文章>
以上就是关于用C#通过ado.net获取access数据库中所有表名,并用treeview显示,谢谢全部的内容,包括:用C#通过ado.net获取access数据库中所有表名,并用treeview显示,谢谢、怎样获取mysql数据库里所有表的名字、c# 获取access数据库所有的表名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)