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

SqlDataReader 问题
看到以下代码
private   void   cmdSample1_Click(object   sender,   System.EventArgs   e)
{
//   SqlDataReader   that   will   hold   the   returned   results
SqlDataReader   dr;

//   Call   ExecuteReader   static   method   of   SqlHelper   class   that   returns   a   SqlDataReader
//   We   pass   in   database   connection   string,   stored   procedure   name   and   a   "1 "   as   value   of   categoryID   parameter
dr   =   SqlHelper.ExecuteReader(txtConnectionString.Text,   "getProductsByCategory ",     1);

//   display   results   in   textbox   on   the   form.
txtResults.Clear();

//   iterate   through   SqlDataReader
while   (dr.Read())
{
//   get   the   value   of   second   column   in   the   datareader   (product   description)
txtResults.Text   =   txtResults.Text   +   dr.GetValue(1)   +   Environment.NewLine;
}


}


程序中dr好像没有自动关闭   请问是不是在函数执行完以后垃圾回收机制给处理了?   垃圾回收机制能关闭dr吗

------解决方案--------------------
会关闭,不过你不会知道它老人家什么时候会关闭这个dr。
------解决方案--------------------
从习惯上说一定要手动关闭,因为手动关闭后所占的资源,由其是非托管资源会马上释放!

------解决方案--------------------
dr = SqlHelper.ExecuteReader(txtConnectionString.Text, "getProductsByCategory ", 1);

要养成习惯,这种地方把dr用using引起来~ 不然下次就给你来个“已经有一个SqlDataReader与该SqlConnection关联”...
------解决方案--------------------
虽然CLR会帮我们回收垃圾,但还是自己手写比较好些,