親密接觸ASP.Net(6)
2024-07-10 12:55:26
供稿:網(wǎng)友
關(guān)于namespace(命名空間)的使用
在前面的程序中我們看到,我常用<% @ import namespace="system.data" %>,這是在引
用m$為我們提供的namespace,這和asp不同的,我們在asp.net必須先引用與我們操作有
關(guān)的namespace后才能使用相應(yīng)的功能。其實說白了,一個namespace; 就是一個組件。
這個是關(guān)于asp.net的高級應(yīng)用,我會在后面的章節(jié)講。(不過要寫到那里,時間......
)
我下面簡單的列舉一些常用的namespace
<% @ import namespace="system.data" %> 處理數(shù)據(jù)時用到
<% @ import namespace="system.data.ado" % > 使用ado.net ; 時用到
<% @ import namespace="system.data.sql" %> sql server 數(shù)據(jù)庫專用
<% @ import namespace="system.data.xml" %> 不用看處理xml用到
<% @ import namespace="system.io" %> 處理文件時用到
<% @ import namespace="system.web.util" %> 發(fā)郵件時大家會用到
<% @ import namespace="system.text" %> 文本編碼時用到
操作數(shù)據(jù)庫需要的東東
講解了namespace,我們可以正式來討論數(shù)據(jù)庫的應(yīng)用了。從上面的可以看出,我們操作
數(shù)據(jù)庫,我們需要引用下面兩個namespace
<% @ import namespace="system.data" %>
<% @ import namespace="system.data.sql" %>
其實system.data.sql 可以用system.data.ado來代替,sql是sql server專用,ado可以
支持任何數(shù)據(jù)庫(只要在主機上存在相應(yīng)的驅(qū)動就行了,如access,mysql,oracle之類的
),這里由于飛刀的數(shù)據(jù)庫是sql server,本來可以用ado,但是想想m$單獨把sql獨立出
來,為何不用呢。至于它能帶來多少好處,飛刀沒有測試過,對sql server肯定要比ado
好一點啦。
無論是ado還是sql ,他們都有幾個基本的對象用于操作
connections 連結(jié)到一個數(shù)據(jù)庫,以便于后面的應(yīng)用(類似ado中的connections)
commands 執(zhí)行sql語句的地方
datareader 讀取執(zhí)行后返回的數(shù)據(jù)內(nèi)容
dataset 儲存數(shù)據(jù),功能強大,我們會具體講解
datasetcommand 執(zhí)行sql語句,并把數(shù)據(jù)存入dataset
這里面可能最難理解的就是dataset,我們先不去管他,先拿軟的開刀
connections(sqlconection 或者 adoconnection)
它的主要任務(wù)就是建立一個與數(shù)據(jù)庫服務(wù)器的聯(lián)結(jié)
<% @ page language="c#" %>
<% @ import namespace="system.data" %>
<% @ import namespace="system.data.sql" %>
<script language= "c#" runat= "server">
public void page_load(object src,eventargs e)
{
stringstrprovider="server=localhost;uid=sa;pwd=;database=aspcn";
sqlconnection myconnection=new sqlconnection(strprovider);
}
</script>
上面我們建立了一個名為myconnection的聯(lián)結(jié),就好像我們在asp中用adodb.connection
打開了一個聯(lián)結(jié).這個聯(lián)結(jié)我們在command或者datasetcommand中將會使用.
它的一些有用的屬性和方法有
connectionstring 取得或設(shè)置連結(jié)數(shù)據(jù)庫的語句
connectiontimeout 取得或設(shè)置連結(jié)數(shù)據(jù)庫的最長時間,也是就超時時間
database 取得或設(shè)置在數(shù)據(jù)庫服務(wù)器上要打開的數(shù)據(jù)庫名
datasource 取得或設(shè)置dsn,大家不會陌生吧:)
password 取得或設(shè)置密碼
userid 取得或設(shè)置登陸名
state 取得目前聯(lián)結(jié)的狀態(tài)
open() 打開聯(lián)結(jié)
close() 關(guān)閉聯(lián)結(jié)
clone() 克隆一個聯(lián)結(jié)。(呵呵,綿羊可以connection我也可以)
我們也通過一個小例子來看看他們的用法:
sqlconnection myconnection = new sqlconnection();
myconnection.datasource = "mysqlserver";
myconnection.password = "";
myconnection.userid = "sa";
myconnection.connectiontimeout = 30;
myconnection.open();
myconnection.database = "northwind";
myconnection.isolationlevel = isolationlevel.readcommitted
commands(sqlcommand 或者 adocommand)
上面的程序中我們打開了一個聯(lián)結(jié),這里我們就需要來使用這個,看例子比較好:
<% @ page language="c#" %>
<% @ import namespace="system.data" %>
<% @ import namespace="system.data.sql" %>
<script language="c#" runat="server">
public void page_load(object src,eventargs e)
{
stringstrprovider="server=localhost;uid=sa;pwd=;database=aspcn";
string strindex="select * from aspcn where purview='webmaster'";
sqlconnection myconnection=new sqlconnection(strprovider);
sqlcommand mycommand = new sqlcommand(strindex,myconnection);
myconnection.open(); //打開聯(lián)結(jié)
mycommand.executenonquery(); //執(zhí)行sql,但不返回任何記錄
myconnection.close();
}
</script>
在上面的例子中我們建立sqlcommand對象時引用了兩個參數(shù)(strindex,myconnection),
從源程序中我們也可以看出來strindex代表的是執(zhí)行的sql語句,myconnection是我們先
前建立的聯(lián)結(jié).然后我們就要先打開myconnnection,然后再執(zhí)行這個sql語句。我們在這
里執(zhí)行用的是executenonquery()方法,這樣不返回記錄集,只是返回受影響的記錄個數(shù)
。
這里我們打開和關(guān)閉數(shù)據(jù)庫也可以這樣做。
stringstrprovider="server=localhost;uid=sa;pwd=;database=aspcn";
string strindex="select * from aspcn where purview='webmaster'";
sqlconnection myconnection=new sqlconnection(strprovider);
sqlcommand mycommand = new sqlcommand(strindex,myconnection);
mycommand.activeconnection.open();
mycommand.executenonquery();
mycommand.activeconnection.close();
所得結(jié)果和先前的一樣。所以執(zhí)行一條sql語句有很多種方法。而且還不只兩種,我們后
面學(xué)了datasetcommand,那打開方法就是n種了:)這就需要看你的習(xí)慣和程序的要求了
;)
我們先來看看command常用的方法和屬性
activeconnection 取得或設(shè)置聯(lián)結(jié)connections
commandtext 執(zhí)行的sql語句或儲存過程(storedprocedure)名
commandtimeout 執(zhí)行的最長時間
commandtype command操作的類型(storedprocedure,text,tabledirect)三種,默認text
parameters 操作儲存過程時使用
execute() 執(zhí)行sql語句或儲存過程
executenonquery() 同上,區(qū)別在于不返回記錄集
clone() 克隆command
同樣看一個例子:
string myselectquery = "select * from categories order by categoryid";
stringmyconnectstring="userid=sa;password=;database=northwind;server=mysqlser
ver";
sqlcommand mycommand = new sqlcommand(myselectquery);
mycommand.activeconnection = new sqlconnection(myconnectstring);
mycommand.commandtimeout = 15;
mycommand.commandtype = commandtype.text;< /font >