Meh*_*ari 13
它将关闭连接(将其返回到池)并在以后使用它时SqlDataReader抛出异常(System.InvalidOperationException).
而不是担心如何关闭它们的顺序,为什么不将它们包装在using语句中.
// the following code has parts left out for brevity...
using(var conn = new SqlConnection( ... ))
using(var cmd = new SqlCommand( ... ))
{
conn.Open();
using(var reader = cmd.ExecuteReader())
{
// do whatever with the reader here...
}
}
Run Code Online (Sandbox Code Playgroud)
using语句确保您的对象被关闭,并且如果您相应地嵌套它们,则以正确的顺序.有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/yh598w02.aspx.
当您关闭/处置对象时,实际的数据库连接将被关闭(返回到池中)SqlConnection,因此数据库资源是安全的。
但是,您应该关闭/处置SqlDataReader也,否则它将保留对该SqlConnection对象的引用,将它们都保留在内存中。SqlDataReader最终,如果您不这样做,终结器将处置该对象,然后该SqlConnection对象也可以被收集,但您无法控制何时发生。
SqlDataReader关闭连接后,它们可以部分使用,但没有任何东西是您真正可以依赖的。它的缓冲区中仍然有一些数据,因此某些操作可能会起作用,但任何需要数据库中更多数据的操作都会导致异常。
| 归档时间: |
|
| 查看次数: |
2612 次 |
| 最近记录: |