我通常寫我DataReader
這樣的代碼:將在DataReader周圍放置「using」語句關閉它嗎?
try
{
dr = cmd.ExecuteReader(CommandBehavior.SingleResult);
while (dr.Read())
{
// Do stuff
}
}
finally
{
if (dr != null) { dr.Close(); }
}
是否安全,只有圍繞DataReader
的創建using
塊替換try
和finally
?我想知道的原因是因爲在我看到的所有Microsoft示例中,他們都使用用於連接的方式,但始終在DataReader
上明確地調用Close()
。
繼承人是從 Retrieving Data Using a DataReader (ADO.NET)一個例子:
static void HasRows(SqlConnection connection)
{
using (connection)
{
SqlCommand command = new SqlCommand(
"SELECT CategoryID, CategoryName FROM Categories;",
connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
作爲一個方面說明,我見過的大多數MS示例要麼過於複雜,要麼沒有充分利用可用的大部分語言功能。部分原因是因爲他們只是翻閱了以前版本的示例代碼,並且只是檢查它是否仍然運行。我的猜測是,這段代碼並不是由它們最明亮的代碼維護的,因爲代碼從來不聰明或效率不高。 – NotMe 2010-01-28 19:30:38
@NotMe來自示例代碼的質量,我懷疑*多年以來*它是由入門級實習生編寫和維護的,而不是實際設計類的人。這就像微軟的平淡無奇。.NET文檔,這種類型讓我期待[SO的新文檔擴展](http://meta.stackoverflow.com/questions/303865/warlords-of-documentation-a-proposed-expansion-of-stack-overflow)。 – 2015-10-20 11:05:32
[是否需要手動關閉和處置SqlDataReader?](http://stackoverflow.com/questions/744051/is-it-necessary-to-manually-close-and-dispose-of-sqldatareader) – 2015-10-20 12:02:55