c#获取数据库中所有表名称的方法

c#获取数据库中所有表名称的方法,第1张

在很多情况下我们需要将指定的数据库中的所有表都列出来 在使用c#进行软件开发时 我们有哪些方法可是实现这个目的呢?本人对此进行概要的总结 有以下 中方式可以实现这个目的

1 sqldmo

SQLDMO是 *** 作SQLServer的理想的方式 如果您的数据库是SQLServer就可以考虑使用这种方式 在C#中使用SQLDMO需要添加SQLDMO的引用 然后在当前的文件中using SQLDMO;即可以使用SQLDMO SQLDMO的对象模型大家可以在SQLServer的帮助中获得

private void GetTabels_DMO(string strServerName string strUser string strPWD string strDatabase)

{

SQLDMO SQLServer Server = new SQLDMO SQLServerClass();

//连接到服务器

Server Connect(strServerName strUser strPWD);

//对所有的数据库遍历 获得指定数据库

for(int i= ;i<Server Databases Count;i++)

{

//判断当前数据库是否是指定数据库

if(Server Databases Item(i+ dbo ) Name ==strDatabase)

{

//获得指定数据库

SQLDMO _Database db= Server Databases Item(i+ dbo );

//获得指定数据库中的所有表

for(int j= ;j<db Tables Count;j++)

{

MessageBox Show(db Tables Item(j+ dbo ) Name);

}

}

}

}

2 adox

adox是ado Extensions for DDL and Security 是微软对ADO技术的扩展 使用它我们可以 *** 作数据库的结构 它是一个组件 估计以后在ADO NET中会增加ADOX的一些功能 如果大家需要ADOX的一些资料 我可以提供 下面的一个例子就是使用ADOX来获得当前数据库的所有表

private void GetTables_ADOX()

{

//ADO的数据库连接

ADODB ConnectionClass cn=new ADODB ConnectionClass();

string ConnectionString= Provider=SQLOLEDB ;Integrated Security=SSPI;Initial Catalog=Test;Data Source=HBXP ;

cn Open(ConnectionString sa );

// *** 作ADOX的Catalog对象

CatalogClass cat=new CatalogClass();

cat ActiveConnection=cn;

for(int i= ;i<cat Tables Count;i++)

{

MessageBox Show(cat Tables[i] Name);

}

}

注意 在上面的代码中cat ActiveConnection不能是ADO Net中的Connection 而应该是ADO的Connection

3 中的oledbconnection

在c#中我们首先会考虑使用来解决问题 如果没有方法才会考虑使用adox或者sqldmo来解决这个问题 虽然adox和sqldmo也能够解决这个问题 但是他们毕竟是组件 中使用起来和在平台会有一些差异 不是很顺手 下面的示例就显示了在中的oledbconnection的方法getoledbschematable来获得数据库的架构 大家可以在msdn中看到这个方法的说明

public DataTable GetOleDbSchemaTable(

Guid schema

object[] restrictions);

参数

schema

OleDbSchemaGuid 的值之一 它指定要返回的架构表

restrictions

限制值的 Object 数组 这些值按照限制列的顺序来应用 即 第一个限制值应用于第一个限制列 第二个限制值应用于第二个限制列 依此类推

返回值

包含请求的架构信息的 DataTable

更多的信息大家可以查询MSDN 下面将示例如何实现

private void GetTables_ADONET()

{

//处理OleDbConnection

string mailto:strConnectionString=@% Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB ;

OleDbConnection cn=new OleDbConnection(strConnectionString);

cn Open();

//利用OleDbConnection的GetOleDbSchemaTable来获得数据库的结构

DataTable dt = cn GetOleDbSchemaTable(OleDbSchemaGuid Tables new object[] {null null null TABLE });

foreach (DataRow dr in  dt Rows)

{

MessageBox Show((String)dr[ TABLE_NAME ]);

}

}

4 信息架构视图

信息架构视图是sql 标准中定义的架构视图 这些视图独立于系统表 信息架构视图的最大优点是 即使我们对系统表进行了重要的修改 应用程序也可以正常地使用这些视图进行访问 下面的示例使用信息架构视图来工作

private void GetTables_INFORMATION_SCHEMA()

{

//打开连接

string strConnectionString=System Configuration ConfigurationSettings AppSettings[ ConnectionString ];

sqlcn=new SqlConnection(strConnectionString);

sqlcn Open();

//使用信息架构视图

SqlCommand sqlcmd=new SqlCommand( SELECT TABLE_NAME FROM INFORMATION_SCHEMA TABLES WHERE TABLE_TYPE = BASE TABLE sqlcn);

SqlDataReader dr=sqlcmd ExecuteReader();

while(dr Read())

{

MessageBox Show(dr GetString( ));

}

}

5 使用系统表

如果您的数据库系统是sqlserver 就可以使用如下的方式来获得当前数据库的所有表

private void GetTables_SystemTable()

{

//打开连接

string strConnectionString=System Configuration ConfigurationSettings AppSettings[ ConnectionString ];

sqlcn=new SqlConnection(strConnectionString);

sqlcn Open();

//使用信息架构视图

SqlCommand sqlcmd=new SqlCommand( SELECT OBJECT_NAME (id) FROM sysobjects WHERE xtype = U AND OBJECTPROPERTY (id IsMSShipped ) = sqlcn);

SqlDataReader dr=sqlcmd ExecuteReader();

while(dr Read())

{

MessageBox Show(dr GetString( ));

}

}

使用sqlserver的存储过程 sp_tables

下面是 盛国军 朋友提出的使用存储过程的方法的补充代码

public void GetTables_StoredProcedure()

{

//处理OleDbConnection

string mailto:strConnectionString=@% Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB ;

OleDbConnection cn=new OleDbConnection(strConnectionString);

cn Open();

//执行存储过程

OleDbCommand cmd=new OleDbCommand( sp_tables cn);

cmd CommandType=CommandType StoredProcedure;

OleDbDataReader dr=cmd ExecuteReader();

while(dr Read())

{

MessageBox Show(dr[ TABLE_NAME ] ToString());

}

lishixinzhi/Article/program/net/201311/13176

microsoft sql server management studio中展开对应表下面的列信息不就可以看到列的详细信息了么?当然这是可以的,但这里我们主要讲的时如何利用sql语句来查询指定表的列信息。

利用sql语句来查询列信息,就是要用到系统视图syscolumns,这个视图记录了数据库中所有表,视图,表值函数等的所有列信息。我们可以利用语句select from syscolumns来查看这个视图返回的信息。

syscolumns返回的列比较多,大部分情况下很多列的信息我们可能用不到,下面我们只解释一下比较常用的列的信息。

1,object_id--这个列是比较重要的,它是返回当前列所属表的ID。利用它,我们就可以查询指定表的所有列信息,比如下面的sql语句是查询表table1的所有列信息。

select from syscolumns where object_id=object_id('table1')

2,name--该列的列名。

3,column_id--该列在数据库中的ID,注意,数据库中任何对象的ID都是唯一的。

4,system_type_id--该列的类型的ID,和下面max_length,precision,scale三列一起可以来举个示例。

5,max_length--该列的最大长度

6,precisionp--如果这列是数值列,那么这是该列的精度,否则就是0

7,scale--如果这列是数值列,那么这就是列的小数位数,否则就是0

system_type_id,max_length,precision,scale四列结合系统视图systypes一起我们来举个示例。

如果我们要查询表table1的所有列,及列的类型,列的精度,列的小数位数,sql语句如下:

select aname,bname,amax_length,aprecision,ascale

from syscolumns a left join systypes b on auser_type_id=buser_type_id

where aobject_id=object_id('table1')

8,is_nullable--该列是否可以为null

9,is_identity--该列是否是标识列

10,is_computed--该列是否是计算列。利用该列,我们也就可以查询某个表的所有计算列了,比如我们要查询表table1中的所有计算列,sql语句如下:

select from syscolumns where object_id=object_id('table1') and is_computed=1

syscolumns视图中常用的列就是这10列了,其它列的信息大家可以到SQLServer 2005联机丛书中查询。

给LZ一个代码可以搜索ACCESS数据库内所有表名的代码。

Option Explicit

    Dim TableSet As ADODBRecordset

    Dim Gconnection As ADODBConnection

    Dim lianjie As String

Sub getTableName()

    lianjie = "Provider=MicrosoftJetOLEDB40;Data Source=J:\LDGZ\南汇40M^2New\ldgz30_wd20100205N19200\Data\wdoldmdb;Persist Security Info=False"

    Set Gconnection = New ADODBConnection

    GconnectionOpen lianjie

    Set TableSet = GconnectionOpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))

    Do Until TableSetEOF

         List1AddItem TableSet!table_name

         TableSetMoveNext

    Loop

End Sub

Private Sub Form_Load()

    getTableName

End Sub

LZ可以将lianjie变量以你自己的连接字符串替代。我这里是用ACCESS7的数据库。

再给LZ提供一个链接

>

是关于获取“

VB 读取ACCESS数据库中所有表名及指定表的字段名

“的Word文件。

1、 查询所有列。

sql语句:SELECT FROM user。

2、查询指定列

sql语句:SELECT nickname, mobile, sex FROM user

3、将查询结果按字段的值进行排序

sql语句:SELECT FROM emp ORDER BY deptno, sal DESC; (按序号升序,并按价格降序)

4、比较查询

sql语句:select Sname as 姓名,Sage as 年龄 from student where Sage<20;

5、字符匹配(like % _ )。

查询所有包含“鸡”的菜品的名称和编号。

sql语句:select name as 菜品名,price as 价格 from food where name like '%鸡%';

1、打开Microsoft SQL Server 2012,选中需要查询所有表的数据库。

2、选中需要查询的表后,点击左上角的“新建查询”,如图。

3、点击“新建查询”后,会在右边d出一个编辑框,我们需要在这里编写sql语句,来查询该数据库下的所有表结构。

4、编写sql语句,点击“执行”,当然,这表语句我们可以根据实际情况,来改变条件只查询需要的表名。

5、这时,会在右下方出现最终的查询结果,name即该库下所有的表名。

以上就是关于c#获取数据库中所有表名称的方法全部的内容,包括:c#获取数据库中所有表名称的方法、如何在sqlserver中获取表的所有列信息、vb如何获取access数据库的所有表和字段名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9534752.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存