2012-02-20 30 views
0

文字列の単一の列を返すストアドプロシージャがあります。 SqlHelper.ExecuteReader(ConnectionString、...)を使用してリスト< string>を返したいが、構文がわからない。SQLReaderを使用してListを返す方法<string>

私はもっと明示されていたはずです。私は読者をループして自分でリストを作成する必要はありませんでした。私はより簡潔な、「1つのライナー」、あるいは私が知らなかったかもしれない何らかの鋳造を望んでいました。

+0

このSqlHelper? http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/fd9229c0-53d0-4b3b-a7da-5df4047343a3 –

+0

例を参照してください。http://stackoverflow.com/questions/2586674/c-これは正しい使い方ですか?sqldatareader-for-daab –

+0

これはDNNの世界では時代遅れではありません。実際、それはDNNバージョン4と5のすべての場所で使用されています。素早く判断する必要はありません。 – Gio

答えて

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

+0

@Gio、ちょうど警告: 'reader.AsEnumerable()。ToList()'のようなことをやろうとしないで、動作しません。リスト内のすべての項目は最後の行を参照します。列挙中にデータを抽出する必要があります。 –

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()); 
     } 
    } 
} 
関連する問題