日期:2014-05-19  浏览次数:20423 次

DataBind之后,SqlDataReader就被自动Close了吗?
很多地方说DataReader必须自己Close,但是我发现很多人的ASP.net代码里并没有close,而且也没有啥问题,好像是自己自动被close,入下:

01:   <%@   OutputCache   Duration= "30 "   VaryByParam= "ImageID "   %>
02:   <%@   Import   Namespace= "System.Data "   %>
03:   <%@   Import   Namespace= "System.Data.SqlClient "   %>
04:
05:   <script   language= "c# "   runat= "server ">
06:
07:   protected   void   Page_Init(Object   sender,   EventArgs   e)   {
08:
09:     string   ImageID   =   Request.QueryString[ "ImageID "];
10:
11:     if   (ImageID   !=   null)   {
12:
13:     SqlConnection   SqlCon   =   new  
SqlConnection( "server=localhost;uid=sa;pwd=;database=northwind ");
14:     StringBuilder   SqlCmd   =   new   StringBuilder();
15:       SqlCmd.Append( "SELECT   Image,   ContentType,   ByteSize   ");
16:       SqlCmd.Append( "FROM   Images   WHERE   ImageID   =   @ImageID ");
17:
18:     SqlCommand   sqlcommand   =   new   SqlCommand(SqlCmd.ToString(),   SqlCon);
19:       sqlcommand.Parameters.Add(new   SqlParameter( "@ImageID ",   SqlDbType.Int));
20:       sqlcommand.Parameters[ "@ImageID "].Value   =   ImageID;
21:     SqlCon.Open();
22:     SqlDataReader   SqlDr   =   sqlcommand.ExecuteReader(CommandBehavior.CloseConnection);
23:
24:     SqlDr.Read();
25:
26:     Response.ContentType   =   (string)SqlDr[ "ContentType "];
27:
28:     Response.OutputStream.Write((byte[])SqlDr[ "Image "],   0,   (int)SqlDr[ "ByteSize "]);
29:
30:     Response.End();
31:
32:     }
33:
34:   }
35:
36:   </script>


请帮我解答!

------解决方案--------------------
不能
必须 手动Close

你一个人使用 当然看不出问题
但是 并发 就会出现大问题...

------解决方案--------------------
顶上
------解决方案--------------------
呵呵,系统刚运行时是很正常的,就跟你把项目发给客户开始时很快是一个道理
------解决方案--------------------
要手动关闭.
------解决方案--------------------
手动关闭
------解决方案--------------------
sqlcommand.ExecuteReader(CommandBehavior.CloseConnection);
msdn上的解释是“在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。”
所以在SqlDr.Close();时,连接会自动关闭的,不知道上面各位是怎么知道要手动关闭的,是保险起见吗?
------解决方案--------------------
要明显的用close,否则连接池会溢出
------解决方案--------------------
必须手动关闭,否则在别的地方再次使用的SqlDataReader的时候会出现错误
楼主可以在代码后面再运行一个SqlDataReader看看
------解决方案--------------------
不手动关闭会出问题
------解决方案--------------------
SqlDataReader独占连接
------解决方案--------------------