SqlConnection
、SqlCommand
和SqlDataReader
都实现了IDisposable
接口。我了解到一种最佳实践是始终将IDisposable
对象包装在using
块中。
因此,我查询数据的常见场景看起来会像这样(在更大的上下文中,像linq2sql这样的映射工具可能更合适,但让我们假设我们想在这里使用这种方法):
using (SqlConnection cn = new SqlConnection("myConnectionstring"))
{
using (SqlCommand cm = new SqlCommand("myQuery", cn))
{
// maybe add sql parameters
using (SqlDataReader reader = cm.ExecuteReader())
{
// read values from reader object
return myReadValues;
}
}
}
这是正确的方法吗?还是说有点过头了?我对这么多嵌套的 using
块有点不确定,但当然我希望按照正确的方法去做。
谢谢!
SqlCommands
的dispose的详细说明 - 这正是我在寻找的信息! - Dennis_cachedMetaData
对象的引用” - 但在OP的示例中,当包含SqlCommand
的作用域结束时,_cachedMetaData
对象将变得可回收,而没有using
语句可能比有using
语句更早。请注意,我并不是在反对调用Dispose:最好不要依赖于对SqlCommand
内部的了解,而是盲目地遵循模式。 - Joe