我用一個參數調用這個方法來調用存儲過程,我正在使用它來查看yield是否對我的團隊有好處。使用SqlDbReader方法產生給出在讀取器關閉時調用CheckDataIsReady的嘗試無效。異常
這是調用存儲過程的通用方法。它調用工作正常,
var parameters = new List<SqlParameter>();
parameters.Add(CreateParamter("GL45", "@prefix", SqlDbType.VarChar));
var reader = StoreProcedureReader("Yield", parameters.ToArray());
這將返回我需要的讀者,但下一行
string value = reader.First()[0].ToString();
導致錯誤時拋出,無效試圖調用CheckDataIsReady時讀取器已關閉。
public static IEnumerable<IDataRecord> StoreProcedureReader(String StoredProcedureName, SqlParameter[] paramters)
{
using (var conn = new SqlConnection(MyConnectionString))
{
using (var cmd = new SqlCommand(StoredProcedureName, conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(paramters);
conn.Open();
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
yield return reader;
}
}
}
}
}
我已經在這裏看到在計算器上幾樣,似乎我可能錯過了一些東西,其中一個例子using語句有SqlCommand的後結束,我試過了,但把它退了出去。我可以合作關閉一個我回來的東西。
你得到第一個閱讀器=>就該功能而言完成的工作=>停止循環,退出 –