2012-02-20 21 views
0

我們有一個存儲過程,它返回一列字符串。我們希望使用SqlHelper.ExecuteReader(ConnectionString,...)來返回一個列表< string>但不確定語法。如何使用SQLReader返回列表<string>

我應該更加明確。我不想循環閱讀並自己創建列表。我希望能有更簡潔的'單線'或者一些我不知道的演員。

+0

這提供SQLHelper? http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/fd9229c0-53d0-4b3b-a7da-5df4047343a3 – 2012-02-20 19:06:58

+0

見例如:http://stackoverflow.com/questions/2586674/c-這是正確的方式使用的sqldatareader爲daab – 2012-02-20 19:08:06

+0

好吧它沒有在DNN世界過時。事實上,它在DNN第4版和第5版中被廣泛使用。不要那麼快地判斷。 – Gio 2012-02-20 19:10:21

回答

2

您可以使用此擴展方法:

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(); 
} 
+0

謝謝我正在尋找這樣的東西。我們有幾種類型的查詢,我希望能夠比閱讀器循環更簡潔。 – Gio 2012-02-20 19:19:09

+0

@Gio,只是一個警告:不要嘗試像'reader.AsEnumerable()。ToList()'這樣的東西,它不會工作...列表中的所有項目都會引用最後一行。您在枚舉時需要提取數據。 – 2012-02-20 19:24:11

0

您是否嘗試過這樣的事情?

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()); 
     } 
    } 
}