熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

c#獲取數據庫中所有表名稱的方法

2013-11-13 10:17:33  來源: .NET編程 

  在很多情況下我們需要將指定的數據庫中的所有表都列出來在使用c#進行軟件開發時我們有哪些方法可是實現這個目的呢?本人對此進行概要的總結有以下中方式可以實現這個目的

  1sqldmo

  SQLDMO是操作SQLServer的理想的方式如果您的數據庫是SQLServer就可以考慮使用這種方式在C#中使用SQLDMO需要添加SQLDMO的引用然後在當前的文件中using SQLDMO;即可以使用SQLDMOSQLDMO的對象模型大家可以在SQLServer的幫助中獲得

  private void GetTabels_DMO(string strServerNamestring strUserstring strPWDstring strDatabase)

  {

  SQLDMOSQLServer Server = new SQLDMOSQLServerClass();

  //連接到服務器

  ServerConnect(strServerNamestrUserstrPWD);

  //對所有的數據庫遍歷獲得指定數據庫

  for(int i=;i<ServerDatabasesCount;i++)

  {

  //判斷當前數據庫是否是指定數據庫

  if(ServerDatabasesItem(i+dbo)Name ==strDatabase)

  {

  //獲得指定數據庫

  SQLDMO_Database db= ServerDatabasesItem(i+dbo);

  //獲得指定數據庫中的所有表

  for(int j=;j<dbTablesCount;j++)

  {

  MessageBoxShow(dbTablesItem(j+dbo)Name);

  }

  }

  }

  }

  2adox

  adox是ado Extensions for DDL and Security是微軟對ADO技術的擴展使用它我們可以操作數據庫的結構它是一個COM組件估計以後在ADONET中會增加ADOX的一些功能如果大家需要ADOX的一些資料我可以提供下面的一個例子就是使用ADOX來獲得當前數據庫的所有表

  private void GetTables_ADOX()

  {

  //ADO的數據庫連接

  ADODBConnectionClass cn=new ADODBConnectionClass();

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

  cnOpen(ConnectionStringsa);

  //操作ADOX的Catalog對象

  CatalogClass cat=new CatalogClass();

  catActiveConnection=cn;

  for(int i=;i<catTablesCount;i++)

  {

  MessageBoxShow(catTables[i]Name);

  }

  }

  注意在上面的代碼中catActiveConnection不能是ADONet中的Connection而應該是ADO的Connection

  3中的oledbconnection

  在c#中我們首先會考慮使用來解決問題如果沒有方法才會考慮使用adox或者sqldmo來解決這個問題雖然adox和sqldmo也能夠解決這個問題但是他們畢竟是com組件中使用起來和在平台會有一些差異不是很順手下面的示例就顯示了在中的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);

  cnOpen();

  //利用OleDbConnection的GetOleDbSchemaTable來獲得數據庫的結構

  DataTable dt = cnGetOleDbSchemaTable(OleDbSchemaGuidTablesnew object[] {null null null TABLE});

  foreach (DataRow dr in  dtRows)

  {

  MessageBoxShow((String)dr[TABLE_NAME]);

  }

  }

  4信息架構視圖

  信息架構視圖是sql 標准中定義的架構視圖這些視圖獨立於系統表信息架構視圖的最大優點是即使我們對系統表進行了重要的修改應用程序也可以正常地使用這些視圖進行訪問下面的示例使用信息架構視圖來工作

  private void GetTables_INFORMATION_SCHEMA()

  {

  //打開連接

  string strConnectionString=SystemConfigurationConfigurationSettingsAppSettings[ConnectionString];

  sqlcn=new SqlConnection(strConnectionString);

  sqlcnOpen();

  //使用信息架構視圖

  SqlCommand sqlcmd=new SqlCommand(SELECT TABLE_NAME FROM INFORMATION_SCHEMATABLES WHERE TABLE_TYPE = BASE TABLEsqlcn);

  SqlDataReader dr=sqlcmdExecuteReader();

  while(drRead())

  {

  MessageBoxShow(drGetString());

  }

  }

  5使用系統表

  如果您的數據庫系統是sqlserver就可以使用如下的方式來獲得當前數據庫的所有表

  private void GetTables_SystemTable()

  {

  //打開連接

  string strConnectionString=SystemConfigurationConfigurationSettingsAppSettings[ConnectionString];

  sqlcn=new SqlConnection(strConnectionString);

  sqlcnOpen();

  //使用信息架構視圖

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

  SqlDataReader dr=sqlcmdExecuteReader();

  while(drRead())

  {

  MessageBoxShow(drGetString());

  }

  }

  使用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);

  cnOpen();

  //執行存儲過程

  OleDbCommand cmd=new OleDbCommand(sp_tablescn);

  cmdCommandType=CommandTypeStoredProcedure;

  OleDbDataReader dr=cmdExecuteReader();

  while(drRead())

  {

  MessageBoxShow(dr[TABLE_NAME]ToString());

  }

  }


From:http://tw.wingwit.com/Article/program/net/201311/13176.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.