小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 李珂consilpa3m 2018-12-14

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

1、sqldmo
SQLDMO是操作SQLServer的理想的方式,如果您的數(shù)據(jù)庫是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);
            //對所有的數(shù)據(jù)庫遍歷,獲得指定數(shù)據(jù)庫
            for(int i=0;i            {
                //判斷當前數(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ù)的擴展,使用它我們可以操作數(shù)據(jù)庫的結(jié)構(gòu)。它是一個COM組件,估計以后在ADO.NET中會增加ADOX的一些功能。如果大家需要ADOX的一些資料,我可以提供。下面的一個例子就是使用ADOX來獲得當前數(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,而應該是ADO的Connection。

3、ado.net中的oledbconnection

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

public DataTable GetOleDbSchemaTable(
   Guid schema,
   object[] restrictions);
參數(shù)
schema
OleDbSchemaGuid 的值之一,它指定要返回的架構(gòu)表。
restrictions
限制值的 Object 數(shù)組。這些值按照限制列的順序來應用。即,第一個限制值應用于第一個限制列,第二個限制值應用于第二個限制列,依此類推。
返回值
包含請求的架構(gòu)信息的 DataTable。
更多的信息大家可以查詢MSDN,下面將示例如何實現(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 標準中定義的架構(gòu)視圖,這些視圖獨立于系統(tǒng)表。信息架構(gòu)視圖的最大優(yōu)點是,即使我們對系統(tǒng)表進行了重要的修改,應用程序也可以正常地使用這些視圖進行訪問。下面的示例使用信息架構(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,就可以使用如下的方式來獲得當前數(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的存儲過程“sp_tables”
下面是“盛國軍”朋友提出的使用存儲過程的方法的補充代碼。

        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í)行存儲過程
            OleDbCommand cmd=new OleDbCommand('sp_tables',cn);
            cmd.CommandType=CommandType.StoredProcedure;
            OleDbDataReader dr=cmd.ExecuteReader();
            while(dr.Read())
            {
                MessageBox.Show(dr['TABLE_NAME'].ToString());
            }
        }

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多