你不應該這樣做!您的閱讀器需要儘快關閉。您不希望在枚舉期間保持打開狀態。最好只創建一個明確的列表,然後返回。
var cmd = SqlCommand("select [EmpName] from [dbo].[Emp]");
List<string> results = new List<string>();
using (var rdr = cmd.ExecuteReader()) {
while (rdr.Read())
results.Add((string) rdr["EmpName"]);
}
return results;
您可以通過鑄造它放在一個DataReader使用LINQ表達式:
using (var rdr = cmd.ExecuteReader()) {
results = (from row in rdr.Cast<DbDataRecord>()
select (string)row["EmpName"]).ToList();
}
但是請注意,你需要調用ToList(),或者當您嘗試列舉你會得到一個錯誤因爲讀者已經關閉了。
編輯
似乎是在什麼時候它是開放的什麼一個DataReader實際上做的評論有些混亂。 From MSDN:
當正在使用的SqlDataReader的, 的關聯的SqlConnection忙 服務SqlDataReader中,並沒有其他 操作可以上 比閉 它以外的的SqlConnection來執行。在調用SqlDataReader的Close 方法之前,情況就是如此。 例如,在調用 關閉之前,您無法檢索 輸出參數。
因此,您應該儘快關閉以釋放連接。
它清晰簡潔。完全切換到LINQ to SQL或保持原樣。 「收益率回報」沒有任何問題。 – 2009-10-15 14:51:20
@JoelFan,*收益率回報*有什麼問題?這也是我如何做到的。 – 2009-10-15 14:52:01
@Stan,問題在於你將連接打開的時間超過了它應該是的 – 2009-10-15 15:00:35