人妻无码中文字幕永久在线,99RE6这里有精品热视频,国产成人综合色就色综合 ,蜜臀av在线观看

新聞建站cms系統(tǒng)、政府cms系統(tǒng)定制開(kāi)發(fā)

廣州網(wǎng)站建設(shè)公司-閱速公司

asp.net新聞發(fā)布系統(tǒng)、報(bào)紙數(shù)字報(bào)系統(tǒng)方案
/
http://www.jdki.com.cn/
廣州網(wǎng)站建設(shè)公司
您當(dāng)前位置:首頁(yè)>ASP.NET MVC

ASP.NET MVC

asp.net中SqlDataReader使用時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接的問(wèn)題

發(fā)布時(shí)間:2010/2/26 11:15:38  作者:  閱讀:1832  

廣告:

本文解釋使用SqlDataReader關(guān)閉數(shù)據(jù)庫(kù)連接的問(wèn)題:

例如把數(shù)據(jù)庫(kù)的操作都封裝到了一個(gè)類中,但SqlDataReader只有在讀取完畢時(shí)才能關(guān)閉數(shù)據(jù)庫(kù),這樣類中就不能關(guān)閉書(shū)庫(kù)庫(kù)連接。在函數(shù)中關(guān)閉,如果在函數(shù)中就關(guān)閉了會(huì)提示‘閱讀器關(guān)閉時(shí)Read的嘗試無(wú)效’ .

這點(diǎn)微軟當(dāng)然想到了。用著個(gè)方法dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);,MSDN中對(duì) CommandBehavior.CloseConnection的解釋是‘在執(zhí)行該命令時(shí),如果關(guān)閉關(guān)聯(lián)的 DataReader 對(duì)象,則關(guān)聯(lián)的 Connection 對(duì)象也將關(guān)閉。’

但。。。。。,請(qǐng)看下面的問(wèn)題:

在函數(shù)中執(zhí)行操作然后返回DataReader,然后在外面讀出數(shù)據(jù),讀取完畢后在外部關(guān)閉DataReader,這樣函數(shù)中的Connetion會(huì)自動(dòng)關(guān)閉嗎?

實(shí)例展示:

我把所有對(duì)數(shù)據(jù)庫(kù)的操作都封裝到了一個(gè)類中,寫(xiě)程序時(shí)就直接調(diào)用這個(gè)類的某個(gè)函數(shù)來(lái)返回結(jié)果。ㄎ覀儗W(xué)習(xí)網(wǎng)-weareleran.net)

下面是一個(gè)用來(lái)返回DataReader對(duì)象的通用類, public SqlDataReader GetReader(string SQL) { SqlConnection Conn; Conn = new SqlConnection(strConn); Conn.Open(); SqlCommand Cmd ; Cmd = CreateCmd(SQL, Conn); SqlDataReader dr; try { dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch { throw new Exception(SQL); } Cmd.Dispose(); return dr; }

在程序在需要的時(shí)候我就直接構(gòu)造好SQL語(yǔ)句,調(diào)用這個(gè)函數(shù)即可,如下:

string sql="select * form student"; SqlDataReader dr = mydate.GetReader(sql);//調(diào)用數(shù)據(jù)庫(kù)操作通用類中的GetReader函數(shù),返回SqlDataReader if(dr.Read()) { .........讀出數(shù)據(jù),賦值給頁(yè)面控件..... } dr.Close();//操作完畢,關(guān)閉DataReader

我按照這樣的寫(xiě)基本已經(jīng)沒(méi)問(wèn)題了,可以正常讀取出數(shù)據(jù),但是我現(xiàn)在擔(dān)心的一個(gè)問(wèn)題是Connection對(duì)象的關(guān)閉問(wèn)題,因?yàn)槭窃诤瘮?shù)中建立的 Connection對(duì)象,沒(méi)辦法在外部來(lái)關(guān)閉它,又不能在函數(shù)中關(guān)閉,如果在函數(shù)中就關(guān)閉了會(huì)提示‘閱讀器關(guān)閉時(shí)Read的嘗試無(wú)效’

但我在函數(shù)中就用了這一行:dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);,MSDN中對(duì) CommandBehavior.CloseConnection的解釋是‘在執(zhí)行該命令時(shí),如果關(guān)閉關(guān)聯(lián)的 DataReader 對(duì)象,則關(guān)聯(lián)的 Connection 對(duì)象也將關(guān)閉。’

也就是說(shuō)我在關(guān)閉了DataReader之后,關(guān)聯(lián)的Connection會(huì)自動(dòng)關(guān)閉,我也測(cè)試過(guò),測(cè)試代碼如下:

string strConn = ConfigurationSettings.AppSettings["SqlDatabase"]; SqlConnection cn=new SqlConnection(strConn); cn.Open(); string sql="select * form student"; SqlCommand cm=new SqlCommand(sql,cn); SqlDataReader dr=cm.ExecuteReader(CommandBehavior.CloseConnection); SqlDataReader dr = mydate.RunProcGetReader(sql); if(dr.Read()) { .......讀取數(shù)據(jù) } dr.Close();//關(guān)閉DataReader Response.Write(cn.State);//輸出Connetion的狀態(tài)
結(jié)果運(yùn)行這一段,輸出:Closed ,可見(jiàn)Connetion確實(shí)自動(dòng)關(guān)閉了!但是如我在上面所說(shuō),我的Coonection是在函數(shù)在建立的,在函數(shù)中執(zhí)行操作然后返回 DataReader,然后在外面讀出數(shù)據(jù),讀取完畢后在外部關(guān)閉DataReader,這樣函數(shù)中的Connetion會(huì)自動(dòng)關(guān)閉嗎

我把所有對(duì)數(shù)據(jù)庫(kù)的操作都封裝到了一個(gè)類中,寫(xiě)程序時(shí)就直接調(diào)用這個(gè)類的某個(gè)函數(shù)來(lái)返回結(jié)果!

下面是一個(gè)用來(lái)返回DataReader對(duì)象的通用類,

public SqlDataReader GetReader(string SQL) { SqlConnection Conn; Conn = new SqlConnection(strConn); Conn.Open(); SqlCommand Cmd ; Cmd = CreateCmd(SQL, Conn); SqlDataReader dr; try { dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection); } catch { throw new Exception(SQL); } Cmd.Dispose(); return dr; }
在程序在需要的時(shí)候我就直接構(gòu)造好SQL語(yǔ)句,調(diào)用這個(gè)函數(shù)即可,如下:

string sql="select * form student";

SqlDataReader dr = mydate.GetReader(sql);//調(diào)用數(shù)據(jù)庫(kù)操作通用類中的GetReader函數(shù),返回SqlDataReader

if(dr.Read())
{
.........讀出數(shù)據(jù),賦值給頁(yè)面控件.....
}
dr.Close();//操作完畢,關(guān)閉DataReader



我按照這樣的寫(xiě)基本已經(jīng)沒(méi)問(wèn)題了,可以正常讀取出數(shù)據(jù),但是我現(xiàn)在擔(dān)心的一個(gè)問(wèn)題是Connection對(duì)象的關(guān)閉問(wèn)題,因?yàn)槭窃诤瘮?shù)中建立的 Connection對(duì)象,沒(méi)辦法在外部來(lái)關(guān)閉它,又不能在函數(shù)中關(guān)閉,如果在函數(shù)中就關(guān)閉了會(huì)提示‘閱讀器關(guān)閉時(shí)Read的嘗試無(wú)效’

但我在函數(shù)中就用了這一行:dr = Cmd.ExecuteReader(CommandBehavior.CloseConnection);,MSDN中對(duì) CommandBehavior.CloseConnection的解釋是‘在執(zhí)行該命令時(shí),如果關(guān)閉關(guān)聯(lián)的 DataReader 對(duì)象,則關(guān)聯(lián)的 Connection 對(duì)象也將關(guān)閉。’

也就是說(shuō)我在關(guān)閉了DataReader之后,關(guān)聯(lián)的Connection會(huì)自動(dòng)關(guān)閉,我也測(cè)試過(guò),測(cè)試代碼如下:

string strConn = ConfigurationSettings.AppSettings["SqlDatabase"]; SqlConnection cn=new SqlConnection(strConn); cn.Open(); string sql="select * form student"; SqlCommand cm=new SqlCommand(sql,cn); SqlDataReader dr=cm.ExecuteReader(CommandBehavior.CloseConnection); SqlDataReader dr = mydate.RunProcGetReader(sql); if(dr.Read()) { .......讀取數(shù)據(jù) } dr.Close();//關(guān)閉DataReader Response.Write(cn.State);//輸出Connetion的狀態(tài)

結(jié)果運(yùn)行這一段,輸出:Closed ,可見(jiàn)Connetion確實(shí)自動(dòng)關(guān)閉了!但是如我在上面所說(shuō),我的Coonection是在函數(shù)在建立的,在函數(shù)中執(zhí)行操作然后返回 DataReader,然后在外面讀出數(shù)據(jù),讀取完畢后在外部關(guān)閉DataReader,這樣函數(shù)中的Connetion會(huì)自動(dòng)關(guān)閉嗎?

自己做了個(gè)測(cè)試:(我們學(xué)習(xí)網(wǎng)-www.wearelearn.net)

public SqlConnection conn; protected void Page_Load(object sender, EventArgs e) { conn = new SqlConnection(DAL.SQLHelper.conn_String); show(); } //簡(jiǎn)單的封裝方法 protected static SqlDataReader reDatareader(SqlConnection conn) { SqlCommand cmd = new SqlCommand("select top 10 * from article ", conn ); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); return dr; } //應(yīng)用封裝方法 protected SqlDataReader redr() { SqlDataReader dr = reDatareader(conn); return dr; } //調(diào)用類,模擬3層構(gòu)架。 protected void show() { SqlDataReader dr = redr(); if (dr.HasRows) { while (dr.Read()) { } Response.Write(conn.State.ToString()); dr.Dispose(); Response.Write(conn.State.ToString()); } }
結(jié)果輸出 OpenClosed,呵呵,結(jié)果能關(guān)閉。

廣告:

相關(guān)文章
asp.net中SqlDataReader使用時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接的問(wèn)題
cms新聞系統(tǒng)購(gòu)買(mǎi)咨詢
掃描關(guān)注 廣州閱速軟件科技有限公司
掃描關(guān)注 廣州閱速科技