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))
{
。。。
}