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会帮我们回收垃圾,但还是自己手写比较好些,