繁体   English   中英

如果在SqlDataReader之前关闭SqlConnection会发生什么?

[英]What happens if you close a SqlConnection before the SqlDataReader?

如果在使用该连接在SqlDataReader上调用Close()之前在SqlConnection对象上调用Close()会发生什么?

实际上,我真正想知道的是你关闭它们的顺序是否重要。 调用SqlConnection.Close()是否完全关闭连接,或者如果不使用该连接在SqlDataReader上调用Close(),它是否会保持打开状态?

很抱歉有多个问题,但我认为我真的不明白连接关闭是如何工作的。

它将关闭连接(将其返回到池),并且SqlDataReader将抛出异常( System.InvalidOperationException )以防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...
    }
}

using语句确保您的对象被关闭,并且如果您相应地嵌套它们,则以正确的顺序。 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/yh598w02.aspx

当您关闭/部署SqlConnection对象时,将关闭(返回到池)实际的数据库连接,因此数据库资源是安全的。

但是,您应该关闭/处置SqlDataReader ,否则它将保留对SqlConnection对象的引用,将它们保存在内存中。 最终,如果你不这样做,终结器将处理SqlDataReader对象,然后也可以收集SqlConnection对象,但你无法控制何时发生这种情况。

关闭连接后, SqlDataReader可以部分使用,但是你真的不能依赖它。 它的缓冲区中仍然有一些数据,因此某些操作可能会起作用,但任何需要数据库中更多数据的操作都会导致异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM