亚洲3P视频,日韩BBW无码,亚洲制服麻豆网站,88re伊人,九草精品视频在线观看,国产精品久久夜,色青青狠狠色,无码熟女一区二区三区,日本一区二区成人网站

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

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

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

ASP.NET MVC

asp.net中SqlDataReader使用時關閉數(shù)據(jù)庫連接的問題

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

廣告:

本文解釋使用SqlDataReader關閉數(shù)據(jù)庫連接的問題:

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

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

但。。。。。,請看下面的問題:

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

實例展示:

我把所有對數(shù)據(jù)庫的操作都封裝到了一個類中,寫程序時就直接調用這個類的某個函數(shù)來返回結果。ㄎ覀儗W習網(wǎng)-weareleran.net)

下面是一個用來返回DataReader對象的通用類, 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; }

在程序在需要的時候我就直接構造好SQL語句,調用這個函數(shù)即可,如下:

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

我按照這樣的寫基本已經(jīng)沒問題了,可以正常讀取出數(shù)據(jù),但是我現(xiàn)在擔心的一個問題是Connection對象的關閉問題,因為是在函數(shù)中建立的 Connection對象,沒辦法在外部來關閉它,又不能在函數(shù)中關閉,如果在函數(shù)中就關閉了會提示‘閱讀器關閉時Read的嘗試無效’

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

也就是說我在關閉了DataReader之后,關聯(lián)的Connection會自動關閉,我也測試過,測試代碼如下:

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();//關閉DataReader Response.Write(cn.State);//輸出Connetion的狀態(tài)
結果運行這一段,輸出:Closed ,可見Connetion確實自動關閉了!但是如我在上面所說,我的Coonection是在函數(shù)在建立的,在函數(shù)中執(zhí)行操作然后返回 DataReader,然后在外面讀出數(shù)據(jù),讀取完畢后在外部關閉DataReader,這樣函數(shù)中的Connetion會自動關閉嗎

我把所有對數(shù)據(jù)庫的操作都封裝到了一個類中,寫程序時就直接調用這個類的某個函數(shù)來返回結果!

下面是一個用來返回DataReader對象的通用類,

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; }
在程序在需要的時候我就直接構造好SQL語句,調用這個函數(shù)即可,如下:

string sql="select * form student";

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

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



我按照這樣的寫基本已經(jīng)沒問題了,可以正常讀取出數(shù)據(jù),但是我現(xiàn)在擔心的一個問題是Connection對象的關閉問題,因為是在函數(shù)中建立的 Connection對象,沒辦法在外部來關閉它,又不能在函數(shù)中關閉,如果在函數(shù)中就關閉了會提示‘閱讀器關閉時Read的嘗試無效’

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

也就是說我在關閉了DataReader之后,關聯(lián)的Connection會自動關閉,我也測試過,測試代碼如下:

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();//關閉DataReader Response.Write(cn.State);//輸出Connetion的狀態(tài)

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

自己做了個測試:(我們學習網(wǎng)-www.wearelearn.net)

public SqlConnection conn; protected void Page_Load(object sender, EventArgs e) { conn = new SqlConnection(DAL.SQLHelper.conn_String); show(); } //簡單的封裝方法 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; } //應用封裝方法 protected SqlDataReader redr() { SqlDataReader dr = reDatareader(conn); return dr; } //調用類,模擬3層構架。 protected void show() { SqlDataReader dr = redr(); if (dr.HasRows) { while (dr.Read()) { } Response.Write(conn.State.ToString()); dr.Dispose(); Response.Write(conn.State.ToString()); } }
結果輸出 OpenClosed,呵呵,結果能關閉。

廣告:

相關文章
asp.net中SqlDataReader使用時關閉數(shù)據(jù)庫連接的問題
cms新聞系統(tǒng)購買咨詢
掃描關注 廣州閱速軟件科技有限公司
掃描關注 廣州閱速科技
绥宁县| 临武县| 武汉市| 灵璧县| 莱阳市| 客服| 金平| 天祝| 健康| 阳山县| 东平县| 黑河市| 聂荣县| 呼图壁县| 廉江市| 礼泉县| 桐城市| 舞阳县| 建昌县| 东乌| 霸州市| 双流县| 彭山县| 方山县| 宝应县| 改则县| 西充县| 大英县| 越西县| 灵武市| 红原县| 上栗县| 和顺县| 宣城市| 阿拉善左旗| 叶城县| 墨脱县| 舟山市| 繁昌县| 勃利县| 青阳县|