[英]Do I need to close the datareader
我有一個簡單的功能,可以處理所有查詢:
DataTable ReadIt(string query, params MySqlParameter[] sqlParams)
{
DataTable dt = new DataTable();
using(MySqlConnection myConnection = new MySqlConnection(sConnection))
{
myConnection.Open();
MySqlCommand myCommand = myConnection.CreateCommand();
myCommand.CommandText = query;
foreach (var p in sqlParams)
{
myCommand.Parameters.Add(p);
}
MySqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
dt.Load(myReader);
myReader.Close();
}
return dt;
}
我需要放myReader.Close();
嗎myReader.Close();
將數據加載到數據表后還是using
后讀取器自動關閉?
您不知道(或至少您不應該知道)DataReader擁有什么資源。
另一方面,應該處理每個可丟棄對象,因為在處理代碼中,對象有機會盡快釋放所使用的資源。
因此,您的MySqlDataReader也應遵循用於MySqlConnection和MySqlCommand的相同模式。 使用聲明是您的朋友
using(MySqlConnection myConnection = new MySqlConnection(sConnection))
using(MySqlCommand myCommand = myConnection.CreateCommand())
{
myConnection.Open();
myCommand.CommandText = query;
foreach (var p in sqlParams)
myCommand.Parameters.Add(p);
using(MySqlDataReader myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection))
{
dt.Load(myReader);
}
}
如果沒有更多的結果網格, DataTable.Load
將自動關閉閱讀器。 我的喜好有點錯過。 我會使用using
:
using(var myReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)) {
dt.Load(myReader);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.