4

DataReaderを使用する正しい方法を知りたい。 (C#およびAdvantageデータベース)ASP.NET、DataReaderを使用する正しい方法

私のデータベースにOrder、ItemおよびCustomerテーブルがあると仮定します。

と、私はcsファイルの各テーブルからデータを読み取る必要があります。

私はデータベース接続を開き、DataReaderを使用してデータを読み取りました。

AdsConnection conn = new AdsConnection("~~~~"); 
AdsCommand cmd; 
AdsDataReader reader; 

conn.open(); 
cmd = conn.CreateCommand(); 
cmd.CommandText = "Select * from order"; 
reader = cmd.ExecuteReader(); 

と今、私は他のテーブルを読み取る必要がある、などです。しかし、私は接続とリーダーを閉じて再接続し、それらを再定義する必要があると思う。

他の読者を定義します。

conn.Close(); 
conn.Open(); 
AdsDataReader itemReader; 
cmd.CommandText = " Select * from item"; 
itemReader = cmd.ExecuteReader(); 

. 
. 
reader.close(); 
itemReader.close(); 
conn.Close(); 

大丈夫ですか?このように使用しますか? もっと良い方法を知っている人は、アドバイスをお願いいたします〜

ありがとうございました!

答えて

4

ADO.NET 2.0では、MARS- Multiple Active Result Setsという機能が導入されました。これにより、複数の照会をデータベースに提出し、1回の呼び出しでそれらを取り出すことができます。接続文字列がtrueにMultipleActiveResultSetsプロパティを設定すること

http://msdn.microsoft.com/en-us/library/yf1a7f4f(v=vs.80).aspx

注:

はここでMARSを使用するコードサンプルとMSDNの記事です。

+0

ニースの答え。 +1。 – David

+0

回答ありがとうございますが、Advantage Database ConnectionはMultipleActiveResultSetsをサポートしていません。 :( –

2

(より適切な答えが削除されたとして)

あなたが開いた接続を維持することはできますが、良い習慣の問題として、できるだけ早くコマンドおよびReaderを閉じる必要があります。

これらの各リソースをusing() { }ステートメントに入れることをお勧めします。

たとえば、各クエリを別々のメソッドに入れることが可能な場合は、接続ごとに別々のConnectionを使用します。 dbが接続プールをサポートしている限り、パフォーマンスの低下はありません。

より多くのポイントの一つ:

  • が列
+0

Aha!リソースをusingに入れれば、私はそれらをまったく閉じる必要はありませんか?^^ tyty! –

+0

正確には、例外的に安全であり、バールはブロックなどに対してきれいにローカルです。 –

+0

IC ! どうもありがとうございました! –

関連する問題