乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      .NET 獲取數(shù)據(jù)庫中所有表名的方法(轉(zhuǎn)載)

       李珂consilpa3m 2018-12-14

      在很多情況下我們需要將指定的數(shù)據(jù)庫中的所有表都列出來。在使用c#進(jìn)行軟件開發(fā)時(shí),我們有哪些方法可是實(shí)現(xiàn)這個(gè)目的呢?本人對此進(jìn)行概要的總結(jié),有以下6中方式可以實(shí)現(xiàn)這個(gè)目的。

      1、sqldmo
      SQLDMO是操作SQLServer的理想的方式,如果您的數(shù)據(jù)庫是SQLServer就可以考慮使用這種方式。在C#中使用SQLDMO需要添加 SQLDMO的引用,然后在當(dāng)前的文件中using SQLDMO;即可以使用SQLDMO。SQLDMO的對象模型大家可以在SQLServer的幫助中獲得。

              private void GetTabels_DMO(string strServerName,string strUser,string strPWD,string strDatabase)
              {
                  SQLDMO.SQLServer Server = new SQLDMO.SQLServerClass();                
                  //連接到服務(wù)器
                  Server.Connect(strServerName,strUser,strPWD);
                  //對所有的數(shù)據(jù)庫遍歷,獲得指定數(shù)據(jù)庫
                  for(int i=0;i            {
                      //判斷當(dāng)前數(shù)據(jù)庫是否是指定數(shù)據(jù)庫
                      if(Server.Databases.Item(i+1,'dbo').Name ==strDatabase)
                      {
                          //獲得指定數(shù)據(jù)庫
                          SQLDMO._Database db= Server.Databases.Item(i+1,'dbo');
                          //獲得指定數(shù)據(jù)庫中的所有表
                          for(int j=0;j                    {
                              MessageBox.Show(db.Tables.Item(j+1,'dbo').Name);
                          }
                      }
                  }
              }

      2、adox

      adox是ado Extensions for DDL and Security,是微軟對ADO技術(shù)的擴(kuò)展,使用它我們可以操作數(shù)據(jù)庫的結(jié)構(gòu)。它是一個(gè)COM組件,估計(jì)以后在ADO.NET中會(huì)增加ADOX的一些功能。如果大家需要ADOX的一些資料,我可以提供。下面的一個(gè)例子就是使用ADOX來獲得當(dāng)前數(shù)據(jù)庫的所有表。

              private void GetTables_ADOX()
              {
                  //ADO的數(shù)據(jù)庫連接
                  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            {
                      MessageBox.Show(cat.Tables[i].Name);
                  }
              }
      注意:在上面的代碼中cat.ActiveConnection不能是ADO.Net中的Connection,而應(yīng)該是ADO的Connection。

      3、ado.net中的oledbconnection

      在c#中我們首先會(huì)考慮使用ado.net來解決問題,如果沒有方法才會(huì)考慮使用adox或者sqldmo來解決這個(gè)問題。雖然adox和 sqldmo也能夠解決這個(gè)問題,但是他們畢竟是com組件,在.net中使用起來和在非.net平臺(tái)會(huì)有一些差異,不是很順手。下面的示例就顯示了在 ado.net中的oledbconnection的方法getoledbschematable來獲得數(shù)據(jù)庫的架構(gòu)。大家可以在msdn中看到這個(gè)方法的說明:

      public DataTable GetOleDbSchemaTable(
         Guid schema,
         object[] restrictions);
      參數(shù)
      schema
      OleDbSchemaGuid 的值之一,它指定要返回的架構(gòu)表。
      restrictions
      限制值的 Object 數(shù)組。這些值按照限制列的順序來應(yīng)用。即,第一個(gè)限制值應(yīng)用于第一個(gè)限制列,第二個(gè)限制值應(yīng)用于第二個(gè)限制列,依此類推。
      返回值
      包含請求的架構(gòu)信息的 DataTable。
      更多的信息大家可以查詢MSDN,下面將示例如何實(shí)現(xiàn)。

              private void GetTables_ADONET()
              {
                  //處理OleDbConnection
                  string strConnectionString=@'Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1';
                  OleDbConnection cn=new OleDbConnection(strConnectionString);
                  cn.Open();
                  //利用OleDbConnection的GetOleDbSchemaTable來獲得數(shù)據(jù)庫的結(jié)構(gòu)
                  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、信息架構(gòu)視圖

      信息架構(gòu)視圖是sql-92 標(biāo)準(zhǔn)中定義的架構(gòu)視圖,這些視圖獨(dú)立于系統(tǒng)表。信息架構(gòu)視圖的最大優(yōu)點(diǎn)是,即使我們對系統(tǒng)表進(jìn)行了重要的修改,應(yīng)用程序也可以正常地使用這些視圖進(jìn)行訪問。下面的示例使用信息架構(gòu)視圖來工作。

              private void GetTables_INFORMATION_SCHEMA()
              {
                  //打開連接
                  string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings['ConnectionString'];
                  sqlcn=new SqlConnection(strConnectionString);
                  sqlcn.Open();
                  //使用信息架構(gòu)視圖
                  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(0));
                  }
              }

      5、使用系統(tǒng)表

      如果您的數(shù)據(jù)庫系統(tǒng)是sqlserver,就可以使用如下的方式來獲得當(dāng)前數(shù)據(jù)庫的所有表:

              private void GetTables_SystemTable()
              {
                  //打開連接
                  string strConnectionString=System.Configuration.ConfigurationSettings.AppSettings['ConnectionString'];
                  sqlcn=new SqlConnection(strConnectionString);
                  sqlcn.Open();
                  //使用信息架構(gòu)視圖
                  SqlCommand sqlcmd=new SqlCommand('SELECT OBJECT_NAME (id) FROM sysobjects WHERE xtype = 'U' AND OBJECTPROPERTY (id, 'IsMSShipped') = 0',sqlcn);
                  SqlDataReader dr=sqlcmd.ExecuteReader();
                  while(dr.Read())
                  {
                      MessageBox.Show(dr.GetString(0));
                  }
              }

      6、使用sqlserver的存儲(chǔ)過程“sp_tables”
      下面是“盛國軍”朋友提出的使用存儲(chǔ)過程的方法的補(bǔ)充代碼。

              public void GetTables_StoredProcedure()
              {
                  //處理OleDbConnection
                  string strConnectionString=@'Integrated Security=SSPI;Data Source=HBXP;Initial Catalog=Test;Provider=SQLOLEDB.1';
                  OleDbConnection cn=new OleDbConnection(strConnectionString);
                  cn.Open();
                  //執(zhí)行存儲(chǔ)過程
                  OleDbCommand cmd=new OleDbCommand('sp_tables',cn);
                  cmd.CommandType=CommandType.StoredProcedure;
                  OleDbDataReader dr=cmd.ExecuteReader();
                  while(dr.Read())
                  {
                      MessageBox.Show(dr['TABLE_NAME'].ToString());
                  }
              }

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多