.net SqlCommand.ExecuteReader关闭连接吗?

问题描述:

在这个句子:.net SqlCommand.ExecuteReader关闭连接吗?

myCommand.ExecuteReader(CommandBehavior.CloseConnection) 

确实异常的情况下,它紧密结合?

命令可能出错的方式很多。

最终,数据读取器的Close方法会关闭连接,前提是没有出错。

如果在构造实际的DataReader对象之前发生了ExecuteReader或其任何调用方法内部的异常,则no,连接将不会关闭。

如果发生异常,我不会信任它来关闭连接。

这取决于发生异常的地方!

如果你正确地构建你的try catch,它会没事的。

例如:

SqlCommand myCommand = new SqlCommand(); 

try 
{ 
    myCommand.dostuff(); 
} 
catch(Exception ex) 
{ 
    // display error message 
} 
finally 
{ 
    myCommand.ExecuteReader(CommandBehavior.CloseConnection); 
} 

如果行:myCommand.ExecuteReader(CommandBehavior.CloseConnection)失败(?也许是数据库已经下降),那么连接不能以编程方式关闭。

做一个“正常”的查询最安全的方式是

using (var conn = new SqlConnection("...")) 
{ 
    conn.Open(); 
    using (var cmd = conn.CreateCommand()) 
    { 
     cmd.CommandText = "..."; 
     using (var reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       // ... 
      } 
     } 
    } 
} 

例外可以将此代码之外被抓住。