實現IDbConnection
,IDbCommand
和IDataReader
的數據庫訪問類都實現IDisposable
,但很明顯,命令和讀者都依賴於連接上。我的問題是,我必須單獨Dispose()每個這些對象還是將處置Connection對象處置其他對象?如何在ADO.NET對象上調用Dispose?
也就是說,我能做到這一點,並保證我不會冒着留下任何非託管資源不被釋放:
using (IDbConnection conn = GetConnection())
{
IDbCommand cmd = conn.CreateCommand();
cmd.CommandText = " ..... ";
IDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
}
}
還是我必須這樣做,而不是:
using (IDbConnection conn = GetConnection())
{
using (IDbCommand cmd = conn.CreateCommand())
{
cmd.CommandText = " ..... ";
using (IDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
}
}
}
}
或者這個實現是依賴的,所以它可能會使用一個數據庫的提供者,但不適用於其他的?