string SQL="select * from AdministerInfo";
SqlConnection MyConntion= new SqlConnection (@"User ID=sa;Password=;Min Pool Size=0;Max Pool Size=1500;Data Source=127.0.0.1;Database=carclub");
SqlCommand MyCommand=new SqlCommand(SQL,MyConntion);
MyConntion.Open (); SqlDataReader MyDataReader= MyCommand.ExecuteReader(); if(MyDataReader.HasRows)
{
MyDataReader.Read();
}MyDataReader.Close();
MyConntion.Close();==========VS============
string SQL="select * from AdministerInfo";
SqlConnection MyConntion= new SqlConnection (@"User ID=sa;Password=;Min Pool Size=0;Max Pool Size=1500;Data Source=127.0.0.1;Database=carclub");
SqlCommand MyCommand=new SqlCommand(SQL,MyConntion);
MyConntion.Open (); SqlDataReader MyDataReader= MyCommand.ExecuteReader(); if(MyDataReader.HasRows)
{
MyDataReader.Read();
}//MyDataReader.Close();  仅仅是就是缺少了这项
MyConntion.Close();
我测试了一下,发现内存空间没有太大变化,看MSDN上当您为了任何其他目的通过使用 SqlDataReader 来使用关联的 SqlConnection 时,必须显式调用 Close 方法。Close 方法将填写输出参数的值、返回值和 RecordsAffected,从而增加了关闭用于处理大型或复杂的查询的 SqlDataReader 所用的时间。其他目的是什么意思?
请问到底有没有SqlDataReader.Close()影响吗?

解决方案 »

  1.   

    你所说的“发现内存空间没有太大变化”是在MyDataReader.Close();  语句的前后还是程序退出的前后??
      

  2.   

    string SQL="select * from AdministerInfo";
    //Response.Write(SQL);
    SqlConnection MyConntion= new SqlConnection (@"User ID=sa;Password=;Min Pool Size=0;Max Pool Size=1500;Data Source=127.0.0.1;Database=carclub");
    SqlCommand MyCommand=new SqlCommand(SQL,MyConntion);
    MyConntion.Open (); SqlDataReader MyDataReader= MyCommand.ExecuteReader(); if(MyDataReader.HasRows)
    {
    MyDataReader.Read();
    }MyDataReader= MyCommand.ExecuteReader();    //加一句这个
    //MyDataReader.Close();
    MyConntion.Close();
    便出现了错误:
    已有打开的与此连接相关联的 DataReader,必须首先将它关闭。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.InvalidOperationException: 已有打开的与此连接相关联的 DataReader,必须首先将它关闭。源错误: 
    行 26: }
    行 27: 
    行 28: MyDataReader= MyCommand.ExecuteReader(); 
    行 29: //MyDataReader.Close();
    行 30: MyConntion.Close();
     源文件: c:\inetpub\wwwroot\test\webform6.aspx.cs    行: 28 ====================
    难道MSDN上说的“其他目的”指的是继续用MyDataReader进行另外一个数据库语句的操作??
      

  3.   

    最好是要SqlDataReader.Close(),这是编程习惯问题,“成对编程”的原则。
      

  4.   

    最好手工加上SqlDataReader.Close(),不能完全寄希望于系统自动释放
      

  5.   

    当然了,如果你已经执行了ExecuteReader()那么在再次执行ExecuteReader()之前要把上一个connection关闭,再打开,才可以执行
      

  6.   

    SqlDataReader是个只进的流。你把MyCommand.ExecuteReader()回返的一个初始化好了的流付给一个尚未被关闭的流,这种做法好象不太合理吧
      

  7.   

    如果SqlDataReader open了,没有close是不能在open 的
      

  8.   

    Micheal_test(LoadRunner) 正解你可以用CommandBehavior.CloseConnection参数
    SqlDataReader.ExecuteReader(CommandBehavior.CloseConnection)
    这样connection关闭,SqlDataReader也关闭。