人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

運(yùn)用Ado.net取得數(shù)據(jù)庫架構(gòu)信息

運(yùn)用Ado.net取得數(shù)據(jù)庫架構(gòu)信息

更新時(shí)間:2022-06-06 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

使用Ado.net獲取數(shù)據(jù)庫架構(gòu)信息

秋 楓 2004-7-3

在開發(fā)的時(shí)候有時(shí)需要獲取數(shù)據(jù)庫架構(gòu)信息來得到數(shù)據(jù)庫的一些其他信息,比如存儲(chǔ)過程、視圖、表、字段的類型、備注說明等。通過OleDb.NET數(shù)據(jù)提供程序可以比較簡(jiǎn)潔的實(shí)現(xiàn)這一點(diǎn)。



一、OleDbConnection的GetOleDbSchemaTable方法

在Ado.net的對(duì)象模型的該對(duì)象充當(dāng)了與數(shù)據(jù)源之間的連接,通過Connection對(duì)象來連接數(shù)據(jù)庫或者從數(shù)據(jù)庫斷開以釋放寶貴的資源。這里我們需要用到的是OleDbConnection對(duì)象的GetOleDbSchemaTable 方法,

定義如下:

public DataTable GetOleDbSchemaTable( Guid schema,object[] restrictions);

方法返回一個(gè)DataTable對(duì)象;

第一個(gè)參數(shù)是OleDbSchemaGuid的枚舉值,是用來指定架構(gòu)信息類型,可以根據(jù)某一個(gè)值來決定所需的架構(gòu)類型,如表、列、視圖等,具體可以參考MSDN;

第二個(gè)參數(shù)為Restrictions的參數(shù),作為一個(gè)oject數(shù)組數(shù)據(jù)類型,起到過濾的作用,如果把第二個(gè)參數(shù)設(shè)置為null,那就返回指定的OleDbSchemaGuid枚舉的所有信息了。

下面用示例程序來進(jìn)行相關(guān)說明,示例界面如下:




整個(gè)窗體包括:

一個(gè)TextBox,用來輸入數(shù)據(jù)庫連接字符串;

一個(gè)DataGrid,用來顯示架構(gòu)信息;

查看按鈕,點(diǎn)擊獲取架構(gòu)信息。

這里以SqlServer 的Northwind數(shù)據(jù)庫為例,在查看按鈕事件中進(jìn)行了如下處理:

private void buttonOK_Click(object sender, System.EventArgs e)

{

this.dataGridSchema.DataSource = GetSqlDbSchemaUsingOleDbConnection (this.textBoxConnString.Text.Trim());

}

通過文本框把連接字符串傳入GetSqlDbSchemaUsingOleDbConnection函數(shù),由OleDbConnection對(duì)象來連接數(shù)據(jù)庫,并獲取構(gòu)架信息,

private DataTable GetSqlDbSchemaUsingOleDbConnection(string connString)

{

OleDbConnection myConn = new OleDbConnection(connString);

myConn.Open();

DataTable table1 = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,null);

myConn.Close();

return table1;

}

上面的函數(shù)返回?cái)?shù)據(jù)庫的所有字段,下面來看看如何通過Restrictions參數(shù)來過濾信息;

參數(shù)數(shù)據(jù)可以定義為

object[] restrictions =

new object[]{"TABLE_CATALOG","TABLE_SCHEMA","TABLE_NAME","COLUMN_NAME"};

具體可參考MSDN文檔。

對(duì)上面函數(shù)進(jìn)行修改,我們只獲取Northwind 數(shù)據(jù)庫Customers表的信息:

private DataTable GetSqlDbSchemaUsingOleDbConnection(string connString)

{

OleDbConnection myConn = new OleDbConnection(connString);

object [] restrictions = new object[]{"Northwind","dbo","Customers",null};

myConn.Open();

DataTable table1 = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,restrictions);

myConn.Close();

return table1;

}



另外對(duì)于Access數(shù)據(jù)庫架構(gòu)信息的獲取也可以通過上面的方法來完成,

private DataTable GetMdbSchemaUsingOleDbConnection(string connString)

{

OleDbConnection myConn = new OleDbConnection(connString);

myConn.Open();

DataTable table1 = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Columns,null);

myConn.Close();

return table1;

}

前面的界面圖示就是執(zhí)行結(jié)果,這里我用的是Access 2003。



二.OleDbDataReader的GetSchemaTable方法

另外一個(gè)獲取架構(gòu)的方法是使用OleDbDataReader的GetSchemaTable方法,

public virtual DataTable GetSchemaTable();

該方法需要結(jié)合OleDbCommand.ExecuteReader的一個(gè)重載方法才能完成,可以設(shè)置重載方法的唯一參數(shù),

public OleDbDataReader ExecuteReader(CommandBehavior behavior);

CommandBehavior為一枚舉對(duì)象,定義為

[Flags]

[Serializable]

public enum CommandBehavior



CommandBehavior.SchemaOnly:只返回列信息,不影響數(shù)據(jù)庫狀態(tài);

CommandBehavior.KeyInfo:返回列和主鍵信息。執(zhí)行此查詢時(shí)不鎖定選定的行。

如果使用CommandBehavior.SchemaOnly就不需要再加CommandBehavior.KeyInfo了。

下面是演示代碼:

private DataTable GetSchemaUsingOleDbDataReader(string connString)

{

OleDbConnection myConn = new OleDbConnection(connString);

DataTable table1 = null;

try

{

OleDbCommand cmd = new OleDbCommand("Select * from Customers",myConn);

myConn.Open();

OleDbDataReader dataReader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);

table1 = dataReader.GetSchemaTable();

dataReader.Close();

}

catch(Exception ex)

{

MessageBox.Show(ex.ToString());

}

finally

{

if(myConn.State != ConnectionState.Closed)

myConn.Close();

myConn.Dispose();

}

return table1;

}

該方法返回了Customers表的架構(gòu)信息,當(dāng)然,如果連接到Access數(shù)據(jù)庫,上面的函數(shù)只需修改一下連接字符串和查詢字符串就可以正確執(zhí)行。



三、其他補(bǔ)充

我們這里所說的是通過OleDb.NET來實(shí)現(xiàn)數(shù)據(jù)庫架構(gòu)信息的獲取。對(duì)于特定的數(shù)據(jù)提供程序Sql Client.NET和Oracle Client.NET等還可以通過其他手段實(shí)現(xiàn)。

比如:

在Sql Server中可以通過信息架構(gòu)視圖來獲取數(shù)據(jù):

SELECT * FROM INFORMATION_SCHEMA.TABLES

獲取表名的清單:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

獲取視圖名清單:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW'

還有獲取列,存儲(chǔ)過程等,具體可以查看SQL SERVER 的聯(lián)機(jī)幫助。

在Oracle數(shù)據(jù)庫中可以通過查詢Oracle數(shù)據(jù)字典來獲取這些信息,具體可以參考Oracle的相關(guān)文檔。



本文參考:《MSDN》、《ADO.NET Core Reference》、《Sql Server 2000聯(lián)機(jī)叢書》

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 海南省| 广安市| 贵南县| 临邑县| 汶川县| 长岛县| 临夏市| 绿春县| 馆陶县| 古田县| 嘉定区| 华安县| 方正县| 翁牛特旗| 巩义市| 河南省| 波密县| 定陶县| 皋兰县| 高要市| 南丰县| 金寨县| 沙雅县| 九寨沟县| 营口市| 彝良县| 九台市| 德江县| 曲麻莱县| 乐清市| 巫溪县| 榆社县| 响水县| 方山县| 崇义县| 闻喜县| 龙陵县| 新余市| 出国| 阿克陶县| 大同市|