用C#通过ado.net获取access数据库中所有表名,并用treeview显示,谢谢

用C#通过ado.net获取access数据库中所有表名,并用treeview显示,谢谢,第1张

首先说明,获取数据库的表明,有对应的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数据库所有的表名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9473413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存