国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

使用Ado.net獲取數據庫架構信息

2024-07-10 13:03:24
字體:
來源:轉載
供稿:網友
使用ado.net獲取數據庫架構信息

秋 楓 2004-7-3

在開發的時候有時需要獲取數據庫架構信息來得到數據庫的一些其他信息,比如存儲過程、視圖、表、字段的類型、備注說明等。通過oledb.net數據提供程序可以比較簡潔的實現這一點。



一、oledbconnection的getoledbschematable方法

在ado.net的對象模型的該對象充當了與數據源之間的連接,通過connection對象來連接數據庫或者從數據庫斷開以釋放寶貴的資源。這里我們需要用到的是oledbconnection對象的getoledbschematable 方法,

定義如下:

public datatable getoledbschematable( guid schema,object[] restrictions);

方法返回一個datatable對象;

第一個參數是oledbschemaguid的枚舉值,是用來指定架構信息類型,可以根據某一個值來決定所需的架構類型,如表、列、視圖等,具體可以參考msdn;

第二個參數為restrictions的參數,作為一個oject數組數據類型,起到過濾的作用,如果把第二個參數設置為null,那就返回指定的oledbschemaguid枚舉的所有信息了。

下面用示例程序來進行相關說明,示例界面如下:




整個窗體包括:

一個textbox,用來輸入數據庫連接字符串;

一個datagrid,用來顯示架構信息;

查看按鈕,點擊獲取架構信息。

這里以sqlserver 的northwind數據庫為例,在查看按鈕事件中進行了如下處理:

private void buttonok_click(object sender, system.eventargs e)

{

this.datagridschema.datasource = getsqldbschemausingoledbconnection (this.textboxconnstring.text.trim());

}

通過文本框把連接字符串傳入getsqldbschemausingoledbconnection函數,由oledbconnection對象來連接數據庫,并獲取構架信息,

private datatable getsqldbschemausingoledbconnection(string connstring)

{

oledbconnection myconn = new oledbconnection(connstring);

myconn.open();

datatable table1 = myconn.getoledbschematable(oledbschemaguid.columns,null);

myconn.close();

return table1;

}

上面的函數返回數據庫的所有字段,下面來看看如何通過restrictions參數來過濾信息;

參數數據可以定義為

object[] restrictions =

new object[]{"table_catalog","table_schema","table_name","column_name"};

具體可參考msdn文檔。

對上面函數進行修改,我們只獲取northwind 數據庫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;

}



另外對于access數據庫架構信息的獲取也可以通過上面的方法來完成,

private datatable getmdbschemausingoledbconnection(string connstring)

{

oledbconnection myconn = new oledbconnection(connstring);

myconn.open();

datatable table1 = myconn.getoledbschematable(oledbschemaguid.columns,null);

myconn.close();

return table1;

}

前面的界面圖示就是執行結果,這里我用的是access 2003。



二.oledbdatareader的getschematable方法

另外一個獲取架構的方法是使用oledbdatareader的getschematable方法,

public virtual datatable getschematable();

該方法需要結合oledbcommand.executereader的一個重載方法才能完成,可以設置重載方法的唯一參數,

public oledbdatareader executereader(commandbehavior behavior);

commandbehavior為一枚舉對象,定義為

[flags]

[serializable]

public enum commandbehavior



commandbehavior.schemaonly:只返回列信息,不影響數據庫狀態;

commandbehavior.keyinfo:返回列和主鍵信息。執行此查詢時不鎖定選定的行。

如果使用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表的架構信息,當然,如果連接到access數據庫,上面的函數只需修改一下連接字符串和查詢字符串就可以正確執行。



三、其他補充

我們這里所說的是通過oledb.net來實現數據庫架構信息的獲取。對于特定的數據提供程序sql client.net和oracle client.net等還可以通過其他手段實現。

比如:

在sql server中可以通過信息架構視圖來獲取數據:

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'

還有獲取列,存儲過程等,具體可以查看sql server 的聯機幫助。

在oracle數據庫中可以通過查詢oracle數據字典來獲取這些信息,具體可以參考oracle的相關文檔。



本文參考:《msdn》、《ado.net core reference》、《sql server 2000聯機叢書》
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 潢川县| 平凉市| 威宁| 苗栗市| 阿图什市| 大埔县| 梅河口市| 漾濞| 峨山| 梁河县| 股票| 女性| 建昌县| 正镶白旗| 泰州市| 抚顺市| 马边| 镇原县| 随州市| 西青区| 青河县| 濮阳市| 江山市| 兖州市| 贡嘎县| 云和县| 岳池县| 凤山市| 慈溪市| 奉节县| 麻江县| 永德县| 岳普湖县| 曲靖市| 隆回县| 勃利县| 三门峡市| 出国| 韶山市| 安塞县| 开阳县|