c# 获取数据库中所有表名称的6种方法与实现代码

发布时间:2020-01-31编辑:脚本学堂
为大家介绍如何用C#来实现获取数据库中所有表名称的方法,本文给出了六种实现方法供大家参考,有兴趣的朋友,可以看看。

方法1、sqldmo
SQLDMO是操作SQLServer的理想的方式,适用于Sql Server数据库环境。
在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=0;i<Server.Databases.Count;i++)
{
//判断当前数据库是否是指定数据库
if(Server.Databases.Item(i+1,"dbo").Name ==strDatabase)
{
//获得指定数据库
SQLDMO._Database db= Server.Databases.Item(i+1,"dbo");
//获得指定数据库中的所有表
for(int j=0;j<db.Tables.Count;j++)
{
MessageBox.Show(db.Tables.Item(j+1,"dbo").Name);
}
}
}
}

方法2、adox
adox是ado Extensions for DDL and Security,是微软对ADO技术的扩展,使用它可以操作数据库的结构。
它是一个COM组件,估计以后在ADO.NET中会增加ADOX的一些功能。
使用ADOX来获得当前数据库的所有表的例子。
 

复制代码 代码示例:
private void GetTables_ADOX()
{
//ADO的数据库连接
ADODB.ConnectionClass cn=new ADODB.ConnectionClass();
string ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Initial Catalog=Test;Data Source=HBXP";
cn.Open(ConnectionString,"sa","",0);
//操作ADOX的Catalog对象
CatalogClass cat=new CatalogClass();
cat.ActiveConnection=cn;
for(int i=0;i<cat.Tables.Count;i++)
{
MessageBox.Show(cat.Tables[i].Name);
}
}

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

方法3、ado.net中的oledbconnection
在c#中,首先考虑使用ado.net来解决问题,如果没有方法才会考虑使用adox或者sqldmo来解决这个问题。虽然adox和sqldmo也能够解决这个问题,但是他们毕竟是com组件,在.net中使用起来和在非.net平台会有一些差异,不是很顺手。
在ado.net中的oledbconnection的方法getoledbschematable来获得数据库的架构的例子。
msdn中的说明:
public DataTable GetOleDbSchemaTable(
Guid schema,
object[] restrictions);
参数
schema
OleDbSchemaGuid 的值之一,它指定要返回的架构表。
restrictions
限制值的 Object 数组。这些值按照限制列的顺序来应用。即,第一个限制值应用于第一个限制列,第二个限制值应用于第二个限制列,依此类推。
返回值
包含请求的架构信息的 DataTable。
更多的信息大家可以查询MSDN。

示例:
 

复制代码 代码示例:
private void GetTables_ADONET()
{
//处理OleDbConnection
string mailto:strConnectionString=@%22Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1";
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"]);
}
}