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

 我来答
机器1718
2022-10-27 · TA获得超过6827个赞
知道小有建树答主
回答量:2805
采纳率:99%
帮助的人:160万
展开全部

  在很多情况下我们需要将指定的数据库中的所有表都列出来 在使用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

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式