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