2011-12-06 1 views
1

Friends、 私は実行したいリストを返す動的なSQLクエリを持っています。 gooleでの私のインターネット検索の大半から、リストのタイプがsqldatareaderをリストに変換することがわかっていなければなりません。 実行されるクエリがわからない場合、どうすればいいですか?動的クエリのため、SqlDataReaderを不明な型のリストに変換します。

Execute(String query) 
{ 
    SqlConnection con=new SqlConnection(connection);//connection from elsewhere 
    SqlCommand cmd = new SqlCommand(query); 
    cmd.connection=con; 
    con.Open(); 
    SqlDataReader result=cmd.ExecuteReader(); 
    //How to convert result to a list when i do not know the table structure 
} 

ここで結果をリストに変換したいと思います。 しかし、私は、クエリが動作するテーブルの詳細を知らない。クエリは、任意のテーブルを照会することができます異なります。 このような状況では、どのようにして結果をリストに変換できますか?出来ますか?

これは私にテーブルの詳細が分からなければ、リストのエントリとなるものは何か、それとも何のリストになるのでしょうか?

この質問に答えるために、別の質問をします。各リストエントリがSqlDataReader結果の1つの行に対応するリストを持つことは可能ですか?

リスト< DataRow> x = result.Select()。ToList()を使用することもできますが、これを使用したくないです。

リストの各エントリを結果の各行にマッピングすると同時に、行を作成するアトミックなデータ型で構成する必要があります。

例:studentからstudenthip studentidを選択してください。 これは私にSqlDataReaderの結果を返します。型に文字列とintが含まれているリストを作成し、その結果の行をリストに入れたいとします。

マークがstudentid = 1432のマークから選択マーク、件名、グレードに変更された場合、タイプにint、string、charが含まれているリストを作成し、その結果の行でリストを埋めたい。

これを行う方法はありますか?

PSユーザーは、クエリを作成し、期待する列の数がわかっているので、上記のようにリストを返すと値を選択する方法を知っています。

+0

あなたはSqlTableAdapterを使用することはできませんか?あなたは結果のスキーマであるDataRowのコレクションを取得します –

答えて

3

、発信者が型を知っている場合は、汎用的な方法であることを確認し、行ごとTを作成...

あるいは、Dapperのドットネットはすでにないのでその:

var list = connection.Query<T>(command [, args]).ToList(); 

発信者がTを認識できない場合は、を使用してList<dynamic>を入力し、エクスパンダをIDictionary<string,object>にキャストして、キーと値のペアを設定します。

あるいは、Dapperのドットネットがすでにあることないので:

var list = connection.Query(command [, args]).ToList(); 

を次に呼び出し側は使用することができます。

foreach(var item in list) { 
    Console.WriteList("{0}, {1}, {2}", item.marks, item.subject, item.grade); 
} 
+0

Gravell、Superは単語です!ありがとう、これは本当に私が望むものを達成するのに役立ちます。私は今日、DapperドットネットとExpandoObjectを新たに学びました。 – david

関連する問題