人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C#のデータベースのつなげ方

C#のデータベースのつなげ方において非同期で繋ぐ方法と同期で繋ぐ方法の使い分けはどのようにして決めているのでしょうか?

参考書を見るとほとんどが非同期のつなげ方になっています。
とりあえず非同期でつないでおけば良いのでしょうか?

*想定してる非同期の接続方法
Dataset ds = new Dataset();
SqlDataAdapter da = new SqlDataAdapter("sql文","接続文字列");
da.Fill(ds);

*想定している同期の接続方法
SqlConnection conn....等(省略)
conn.Open();
(処理)
conn.Close();

初歩的な質問ですが同期処理と非同期処理の使い分けについてのアドバイスをお願いします。

●質問者: 匿名質問者
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 匿名回答1号

……接続型と非接続型のことでしょうか?

http://msdn.microsoft.com/ja-jp/vstudio/dd231281.aspx

非接続型のデータアクセスも、内部的な動作は接続型のデータアクセスとなんら変わりがない。DataAdapter が内部的に使用するクラスは Connection であり、Command である。違うのは、内部的に行われる DBMS との接続と Select 文の実行が、あくまでデータを DataSet 内部に格納することを目的としている点である。接続型のデータアクセスの場合、データを行単位に読み込みながら処理を逐次実行するので DBMS との接続が常に必要だが、DataAdapter を経由した場合、インメモリの DataSet を使うため、たとえばデータを画面へ表示するための編集処理などに関しては DBMS との接続が断たれていても問題がない。参照系の基本的な動作に関しては接続型データアクセスと非接続型データアクセスとの相違はほとんどないものの、インメモリのデータベースである DataSet で十分対応可能な処理に関しては、DBMS とのコネクションといった貴重なリソースを解放できるという点で非接続型データアクセスの方がスケーラブルなプログラミングモデルとなっている。


2 ● 匿名回答2号

SELECTを想定と思いますが
たとえばWebアプリなどでコネクションを1セッションで占有してしまうと
多数のリクエストに応えられないのでとりあえず対象データをまとめて取得して
あとからこねくり回すような場合にDataSetに格納して接続をとっとと解放します。
対象件数が多い場合はその分丸ごとメモりを占有するのと取得する時間がかかります。

C/Sシステムで上から順走査するだけのような場合はDataReaderを使うと
対象レコードのみ(性格にはキャッシュ分)のデータ転送となりますので処理は軽いですが処理が終わる(ロジック上コネクションを解放する)までコネクションを占有します。

DataSetを使った更新処理は小回りが利かないのであまり採用例をみません。
(単純画面連結などでしか)

DataSetはシリアライズ可能で関数やWebサービス(asmx)のパラメータや返り値として転送に使えるので必要なデータをDataTableとして沢山入れて気軽に渡すことができます(非接続なので)

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ