我寫了這個方法,這樣我就不必每次都寫開放連接等代碼。dataReader是否會保持null,導致「讀取器關閉時調用MetaData的嘗試失敗」?
public static bool TryExecuteReader(string commandText,string functionNameForLogging, string errorText, out SqlDataReader dataReader)
{
bool success = false;
dataReader = null;
try
{
using (SqlConnection sqlConnection = SqlUtilities.CreateSqlConnection())
{
sqlConnection.Open();
SqlCommand sqlCommand = sqlConnection.CreateCommand();
sqlCommand.CommandText = commandText;
dataReader = sqlCommand.ExecuteReader(CommandBehavior.CloseConnection);
}
success = true;
}
catch (Exception ex)
{
SqlUtilities.LogError(functionNameForLogging,ex.Message,-1);
}
return success;
}
我認爲這應該可以正常工作,但最近我收到錯誤「無效的嘗試調用元數據,當閱讀器關閉」。現在我不確定爲什麼會出現這個錯誤。但這似乎是最可能的原因。它已經有一段時間了,所以我無法確定錯誤是否是由這種方式引起的。數據讀取器在使用塊結束後是否保留爲空?
但DataReader的被宣佈爲使用外塊。而是在外部宣佈並傳遞給此方法。 – shashi 2011-04-07 13:03:11
@sassyboy - 這並不重要,因爲您正在命令對象中使用連接sqlConnection。並且使用你的sqlConnection對象的命令對象被用於'.ExecuteReader'。這意味着你的數據庫正在使用你的sqlConnection對象。因此,在sqlConnection對象被使用的using語句之後立即發生了什麼,這意味着您的命令對象已完成並且您的數據讀取器已完成。 – JonH 2011-04-07 13:06:13