我們有一個存儲過程,它返回一列字符串。我們希望使用SqlHelper.ExecuteReader(ConnectionString,...)來返回一個列表< string>但不確定語法。如何使用SQLReader返回列表<string>
我應該更加明確。我不想循環閱讀並自己創建列表。我希望能有更簡潔的'單線'或者一些我不知道的演員。
我們有一個存儲過程,它返回一列字符串。我們希望使用SqlHelper.ExecuteReader(ConnectionString,...)來返回一個列表< string>但不確定語法。如何使用SQLReader返回列表<string>
我應該更加明確。我不想循環閱讀並自己創建列表。我希望能有更簡潔的'單線'或者一些我不知道的演員。
您可以使用此擴展方法:
public static IEnumerable<IDataRecord> AsEnumerable(this IDataReader reader)
{
while (reader.Read())
{
yield return reader;
}
}
...
using (var reader = SqlHelper.ExecuteReader(connectionString, query))
{
var list = reader.AsEnumerable().Select(r => r.GetString(0)).ToList();
}
謝謝我正在尋找這樣的東西。我們有幾種類型的查詢,我希望能夠比閱讀器循環更簡潔。 – Gio 2012-02-20 19:19:09
@Gio,只是一個警告:不要嘗試像'reader.AsEnumerable()。ToList()'這樣的東西,它不會工作...列表中的所有項目都會引用最後一行。您在枚舉時需要提取數據。 – 2012-02-20 19:24:11
看看Retrieving Data Using a C# .NET DataReader。該示例爲解決這個問題提供瞭解決方案。
您是否嘗試過這樣的事情?
var sl = new List<string>();
// Edit accordingly
string sql = "";
// Edit accordingly
string cs = "Data Source= ;Initial Catalog= ;Integrated Security= ;";
using (var conn = new SqlConnection(cs))
{
conn.Open();
using (var cmd = new SqlCommand(sql, conn))
{
using (var dr = new command.ExecuteReader())
{
var myRow = dr["MyColumn"];
sl.Add(myRow.ToString());
}
}
}
這提供SQLHelper? http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/fd9229c0-53d0-4b3b-a7da-5df4047343a3 – 2012-02-20 19:06:58
見例如:http://stackoverflow.com/questions/2586674/c-這是正確的方式使用的sqldatareader爲daab – 2012-02-20 19:08:06
好吧它沒有在DNN世界過時。事實上,它在DNN第4版和第5版中被廣泛使用。不要那麼快地判斷。 – Gio 2012-02-20 19:10:21