2010-11-26 11 views
0

私はc#とSQL Serverを使用してデータベースからデータを取得し、pageloadのページにいくつかのラベルを設定しています。情報は、単一の行にすべての情報を返すSQLビューから取得されます。例えば:SQL Serverから単一行のクエリを返して使用する最も効率的な方法は?

SELECT 'car' AS product, 12 As daysUntilEOM, '2010-01-01' AS LastHoliday, 23.7 AS Length

常に唯一の1行があります私のプロジェクトの残りの部分は、LINQを使用していると私はもともとその道を行き始めたが、そのオブジェクトを作成する点は何ですか

を返さ私はこれを一度だけ使用し、オブジェクトにすべての値をキーと値のペアとして割り当て、ラベルのテキストにそれらを再割り当てします。無意味なコーディングがたくさんあるようです。

datareaderを使用しても同じ問題があるようです。

DataAdapterを使用してデータセットを埋め、DALからページにデータセットを戻してから、ラベルに直接割り当てることが最も簡単な解決策です。しかし、一列のデータの場合、これはトラックを使って単一のトマトを運ぶようなものです。

最初の列の代わりに行全体を返すExecuteScalarのようなものがありますか? DataAdapterのコーディングの容易さだけで十分でしょうか?オーバーヘッドについて心配する必要はありませんか?

ありがとうございます!

答えて

5

ExecuteReaderに電話し、CommandBehavior.SingleRowフラグを渡す必要があります。カップリングを避けるために

、あなたはこのように、辞書にDataReaderを変換することができます:

return Enumerable.Range(0, reader.FieldCount) 
       .ToDictionary(reader.GetName, reader.GetValue); 
+0

しかし、データアクセスレイヤーからラベルテキストにデータを渡すにはどうすればよいですか?オブジェクトや配列を作成し、ロードしてからラベルテキストにロードしますか? – JumpingJezza

+0

@ジャンプ:あなたはそれをリーダーから直接読み込むことができますか? (おそらく 'IDataRecord'として) – SLaks

+0

@スラックス:DALとフロントエンドを別々に保つのは間違いありません。 – JumpingJezza

0

スカラー値ではなく、行を返すは、ExecuteScalar。コマンドオブジェクトを持つDataAdapter(場合によっては、SQL文を実行するのではなく、ストアドプロシージャにパラメータを渡すこともできます)。

関連する問題