首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

DataBind之后,SqlDataReader就被自动Close了吗?该如何解决

2012-02-22 
DataBind之后,SqlDataReader就被自动Close了吗?很多地方说DataReader必须自己Close,但是我发现很多人的ASP

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独占连接
------解决方案--------------------


towszhoho(做项目做到死):
你那样做会存在问题,可能是开发工具的bug,一般情况下datareader没有自动关闭,你可以写一个上万次的循环看看就知道了
[解决办法]
sqlcommand.ExecuteReader(CommandBehavior.CloseConnection);
msdn上的解释是“在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。”

在dr.Close() 的时候就应该关闭连接了。
[解决办法]
安全第一

还是和open配对出现的好
[解决办法]
一定要手动关闭,你多次访问数据库,运行就会报错
[解决办法]
sqlcommand.ExecuteReader(CommandBehavior.CloseConnection);
msdn上的解释是“在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。”
在dr.Close() 的时候就应该关闭连接了。

解释很到位啊。
[解决办法]
reader必须手动关闭,如果用了using或者commandbehavior,数据库连接是不用手动close
[解决办法]
必须手动关闭.

你上面的代码
SqlDataReader SqlDr = sqlcommand.ExecuteReader(CommandBehavior.CloseConnection);
这个是在用完后自动关闭的意思..你可以去查一下msdn
[解决办法]
手动关闭保险
[解决办法]
必须手动关闭.否则用的人多就会出问题了
[解决办法]
看错了 ,DataReader必须手动关闭,当使用CommandBehavior.CloseConnection时,程序会主动关闭数据库连接,而不是关闭DataReader.
[解决办法]
手动关闭,或者实例DataReader对象时加CommandBehavior.CloseConnection参数
[解决办法]
手动关
[解决办法]
手动Close!!!

不然真正使用时,SQL进程会很占内存,而且会连不上数据库。
[解决办法]
不会自动关闭 但是如果实现了IDISPOSE接口将会在释放的时候自动关闭 或者是CLR处理了

[解决办法]
你给的列子里有缓存设置,ASP.NET里页面生成HTML发送到客户端后, 会马上释放掉服务器资源因此没写, 但是手动最好
[解决办法]
呵呵,帮顶.
顺便帮我看下这个问题:
http://community.csdn.net/Expert/topic/5462/5462333.xml?temp=.8266413
[解决办法]
最好手动关闭,虽然有时候会自动回收,但不保险
[解决办法]
养成手动释放的好习惯
[解决办法]
2个人操作同一个文件的时候就会出现文档被锁定咯.....那程序就变无限等待了,也就是程序死掉了
[解决办法]
@_@
[解决办法]
我做过很多次,还是手动关闭保险!
[解决办法]
必须手动关闭 虽然有自动关闭 但是延迟的时间是多长?这个是不可控的
[解决办法]


买书的时候要选好,这种书买了是浪费钱。



[解决办法]
藜叔很生气,不关闭的的话,后果会很严重。
有些是隐式关闭的你可能没看清楚比方上面讲的
CommandBehavior.CloseConnection
或者用using括起来都行。
[解决办法]
要手动关闭。
DataReader是独占连接。在调用Close方法前,当前连接是不能被其它地方使用的。


有两种比较好的方法:
SqlDataReader SqlDr = sqlcommand.ExecuteReader(CommandBehavior.CloseConnection);
像上面那样加上一个参数,使得在关闭DataReader的时候自动把数据库连接也关闭。当然,你得记得在不使用DataReader的时候将其关闭。
另外,就是用using了:
using (SqlConnection connection = new SqlConnection(connectionString))
{
。。。
}

热点排行