ASP.NET數(shù)據(jù)庫編程 (2)
2024-07-10 13:02:52
供稿:網(wǎng)友
通過ado.net訪問數(shù)據(jù)庫
不論從語法來看,還是從風(fēng)格和設(shè)計(jì)目標(biāo)來看,ado.net都和ado有顯著的不同。在asp中通過ado訪問數(shù)據(jù)庫,一般要通過以下四個(gè)步驟:
1、 創(chuàng)建一個(gè)到數(shù)據(jù)庫的鏈路,即ado.connection;
2、 查詢一個(gè)數(shù)據(jù)集合,即執(zhí)行sql,產(chǎn)生一個(gè)recordset;
3、 對(duì)數(shù)據(jù)集合進(jìn)行需要的操作;
4、 關(guān)閉數(shù)據(jù)鏈路。
在ado.net里,這些步驟有很大的變化。ado.net的最重要概念之一是dataset。dataset是不依賴于數(shù)據(jù)庫的獨(dú)立數(shù)據(jù)集合。所謂獨(dú)立,就是:即使斷開數(shù)據(jù)鏈路,或者關(guān)閉數(shù)據(jù)庫,dataset依然是可用的。如果你在asp里面使用過非連接記錄集合(connectionless recordset),那么dataset就是這種技術(shù)的最徹底的替代品。
有了dataset,那么,ado.net訪問數(shù)據(jù)庫的步驟就相應(yīng)地改變了:
1、創(chuàng)建一個(gè)數(shù)據(jù)庫鏈路;
2、請(qǐng)求一個(gè)記錄集合;
3、把記錄集合暫存到dataset;
4、如果需要,返回第2步;(dataset可以容納多個(gè)數(shù)據(jù)集合)
5、關(guān)閉數(shù)據(jù)庫鏈路;
6、在dataset上作所需要的操作。
dataset在內(nèi)部是用xml來描述數(shù)據(jù)的。由于xml是一種平臺(tái)無關(guān)、語言無關(guān)的數(shù)據(jù)描述語言,而且可以描述復(fù)雜數(shù)據(jù)關(guān)系的數(shù)據(jù),比如父子關(guān)系的數(shù)據(jù),所以dataset實(shí)際上可以容納具有復(fù)雜關(guān)系的數(shù)據(jù),而且不再依賴于數(shù)據(jù)庫鏈路。
ado.net有許多對(duì)象,我們先看看最基本的也最常用的幾個(gè)。首先看看adoconnection。和ado的adodb.connection對(duì)象相對(duì)應(yīng),adoconnection維護(hù)一個(gè)到數(shù)據(jù)庫的鏈路。為了使用ado.net對(duì)象,我們需要引入兩個(gè)namespace:system.data和system.data.ado,使用asp.net的import指令就可以了:
<%@ import namespace="system.data" %>
<%@ import namespace="system.data.ado" %>
和ado的connection對(duì)象類似,adoconnection對(duì)象也有open和close兩個(gè)方法。下面的這個(gè)例子展示了如何連接到本地的ms sql server上的pubs數(shù)據(jù)庫。
<%@ import namespace="system.data" %>
<%@ import namespace="system.data.ado" %>
<%
'設(shè)置連接串...
dim strconnstring as string
strconnstring = "provider=sqloledb; data source=(local); " & _
"initial catalog=pubs; user id=sa"
'創(chuàng)建對(duì)象adoconnection
dim objconn as adoconnection
objconn = new adoconnection
'設(shè)置adoconnection對(duì)象的連接串
objconn.connectionstring = strconnstring
objconn.open() '打開數(shù)據(jù)鏈路
'數(shù)據(jù)庫操作代碼省略
objconn.close() '關(guān)閉數(shù)據(jù)鏈路
objconn = nothing '清除對(duì)象
%>
上面的代碼和ado沒有什么太大的差別。應(yīng)該提到的是,ado.net提供了兩種數(shù)據(jù)庫連接方式:ado方式和sql方式。這里我們是通過ado方式連接到數(shù)據(jù)庫。關(guān)于建立數(shù)據(jù)庫連接的詳細(xì)信息,我們?cè)诤竺娴钠袑?huì)講到。
adodatasetcommand
另一個(gè)不得不提到的ado.net對(duì)象是adodatasetcommand,這個(gè)對(duì)象專門負(fù)責(zé)創(chuàng)建我們前面提到的dataset對(duì)象。另一個(gè)重要的ado.net對(duì)象是dataview,它是dataset的一個(gè)視圖。還記得dataset可以容納各種各種關(guān)系的復(fù)雜數(shù)據(jù)嗎?通過dataview,我們可以把dataset的數(shù)據(jù)限制到某個(gè)特定的范圍。
下面的代碼展示了如何利用adodatasetcommand為dataset填充數(shù)據(jù):
'創(chuàng)建sql字符串
dim strsql as string = "select * from authors"
'創(chuàng)建對(duì)象adodatasetcommand 和dataset
dim objdscommand as adodatasetcommand
dim objdataset as dataset = new dataset
objdscommand = new adodatasetcommand(strsql, objconn)
'填充數(shù)據(jù)到dataset
'并將數(shù)據(jù)集合命名為 "author information"
objdscommand.filldataset(objdataset, "author information