C#取資料庫名稱與資料庫中表名的方法
在很多情況下我們需要將指定的資料庫中的所有表都列出來。在使用c#進行軟體開發時,我們有哪些方法可是實現這個目的呢?本人對此進行概要的總結,有以下6中方式可以實現這個目的。
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=0;i
2、adox
adox是ado Extensions for DDL and Security,是微軟對ADO技術的擴充套件,使用它我們可以運算元據庫的結構。它是一個COM元件,估計以後在ADO.NET中會增加ADOX的一些功能。如果大家需要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.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 strConnectionString=@"Integrated 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"]);
}
}
4、資訊架構檢視
資訊架構檢視是sql-92 標準中定義的架構檢視,這些檢視獨立於系統表。資訊架構檢視的最大優點是,即使我們對系統表進行了重要的修改,應用程式也可以正常地使用這些檢視進行訪問。下面的示例使用資訊架構檢視來工作。
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(0));
}
}
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') = 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();
//執行儲存過程
OleDbCommand cmd=new OleDbCommand("sp_tables",cn);
cmd.CommandType=CommandType.StoredProcedure;
OleDbDataReader dr=cmd.ExecuteReader();
while(dr.Read())
{
MessageBox.Show(dr["TABLE_NAME"].ToString());
}
}
獲取資料庫名稱的方法
以下示例返回當前資料庫的名稱。
SELECT DB_NAME() AS [Current Database];
GOB. 返回指定資料庫 ID 的資料庫名稱
以下示例返回資料庫 ID3的資料庫名稱。
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=0;i
- {
- //判斷當前資料庫是否是指定資料庫
- if(Server.Databases.Item(i+1,"dbo").Name ==strDatabase)
- {
- //獲得指定資料庫
- SQLDMO._Database db= Server.Databases.Item(i+1,"dbo");
- //獲得指定資料庫中的所有表
- for(int j=0;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的一些資料,我可以提供。下面的一個例子就是使用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
- {
- MessageBox.Show(cat.Tables[i].Name);
- }
- }
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 strConnectionString=@"Integrated 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"]);
- }
- }
4、資訊架構檢視
資訊架構檢視是sql-92 標準中定義的架構檢視,這些檢視獨立於系統表。資訊架構檢視的最大優點是,即使我們對系統表進行了重要的修改,應用程式也可以正常地使用這些檢視進行訪問。下面的示例使用資訊架構檢視來工作。
- 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(0));
- }
- }
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') = 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();
- //執行儲存過程
- OleDbCommand cmd=new OleDbCommand("sp_tables",cn);
- cmd.CommandType=CommandType.StoredProcedure;
- OleDbDataReader dr=cmd.ExecuteReader();
- while(dr.Read())
- {
- MessageBox.Show(dr["TABLE_NAME"].ToString());
- }
- }
獲取資料庫名稱的方法
以下示例返回當前資料庫的名稱。
- SELECT DB_NAME() AS [Current Database];
GOB. 返回指定資料庫 ID 的資料庫名稱
以下示例返回資料庫 ID3的資料庫名稱。
- USE master;
- GO
- SELECT DB_NAME(3)AS [Database Name];
- GO
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-617162/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 修改資料庫名稱資料庫
- Postgresql10資料庫之更改資料庫的名稱SQL資料庫
- nid修改資料庫名稱資料庫
- 如何修改MySQL資料庫名稱MySql資料庫
- 資料庫名、例項名、資料庫域名、全域性資料庫名、服務名概念區分資料庫
- 用NID修改資料庫名稱資料庫
- 二、修改資料庫全域性名稱資料庫
- 查詢當前資料庫名、使用者名稱、資料庫伺服器IP、埠、資料庫版本資訊。資料庫伺服器
- 關於資料庫登陸名和資料庫使用者名稱的一點點心得資料庫
- 關於修改資料庫名稱和ID的方法總結資料庫
- Oracle NID工具修改資料庫DBID和資料庫名稱Oracle資料庫
- 2.6.2 確定全域性資料庫名稱資料庫
- Oracle中關於資料庫例項名與資料庫服務名(轉載)Oracle資料庫
- 獲取sql server資料庫中所有庫、表、欄位名的方法SQLServer資料庫
- 在RAC中用NID修改資料庫名稱資料庫
- 獲取SQL資料庫中某個表中的所有欄位名稱的通用方法SQL資料庫
- 資料庫名,資料庫例項名,資料庫域名,作業系統環境變數資料庫作業系統變數
- 更改資料庫表名資料庫
- 【Mysql】改資料庫庫名操作MySql資料庫
- 如何修改資料庫例項及資料庫名資料庫
- ORACLE資料庫修改資料庫名db_nameOracle資料庫
- 【sqlserver】更改資料庫註冊的計算機名稱SQLServer資料庫計算機
- 【原創】使用nid命令修改資料庫名稱資料庫
- 資料庫別名已存在的解決方法資料庫
- SQL資料庫使用者只有“名稱”而無“登陸名”解決SQL資料庫
- oracle資料庫名和例項名的區別Oracle資料庫
- 實驗課程名稱:資料庫系統概論資料庫
- Oracle 11g修改資料庫使用者名稱Oracle資料庫
- 安全快速修改Mysql資料庫名的5種方法MySql資料庫
- 查詢資料庫中表的資訊資料庫
- ***批次修改資料夾名稱
- mongodb對資料庫建立使用者名稱和密碼MongoDB資料庫密碼
- Oracle 11g支援修改資料庫使用者名稱Oracle資料庫
- 統計資料庫中表大小資料庫
- 更改資料庫SID名和db_name名資料庫
- 使用手工方法Clone異名資料庫實驗資料庫
- 使用RMAN Duplicate方法搭建異名資料庫實驗資料庫
- MySQL顯示連線的資料庫名MySql資料庫