- PR -

複数フォームからのConnectionの共有

投稿者投稿内容
Lem
会議室デビュー日: 2004/10/19
投稿数: 10
投稿日時: 2006-05-09 11:26
1年半ほどC#で社内用の簡単なソフトを作っているのですが、
なかなか自分が成長したとは思えない今日この頃です。。。

ところで、Windowアプリで複数フォームで構成されたものを作るのですが、
いつも各フォームにConnectionを作り、dataAdapterを作り、dataSetを作り(ウィザードを使って作っています)・・・
という作業を繰り返しています。
これで、十分に動くのですが、フォームA、B、CではConnection_SとConnection_Tを使うような状況があり、
これらを各フォームではなく一括してどこかに記述するようなスマートな方法が取れないか模索しています。

どのような方法を使うのが一般的なのでしょうか?
なせ
常連さん
会議室デビュー日: 2006/01/06
投稿数: 41
お住まい・勤務地: おおさか
投稿日時: 2006-05-09 11:47
若輩者ながら私の使う方法としては、

メインとなるフォーム(もしくはDB接続専用のクラス)で
PublicでConnectionのインスタンスを作成。

それを他のフォームから参照してSQLの結果を受け取るという方法を取りますね。

#私はコードで書くほうが好きなので
#あんまりウィザードを使って作ることが無かったりしますねぇ。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-09 11:54
ウィザードを使うのをやめる方法でも良いでしょうか?

一般的かどうかは分かりませんが、
コード:
public void Func()
{
	using( SqlConnection c = new SqlConnection( connectionString ) )
	{
		SqlDataAdapter a = new SqlDataAdapter( "クエリ", connection );
		・・・
	
		using( SqlDbCommand command = new SqlDbCommand( "クエリ", connection ) )
		{
			・・・
		}
	}
}


みたいにインスタンスは各メソッド内のスコープにし、Connection は共通化しないです。
共通化するのは接続文字列等だけですね。

# 私もウィザードは一切使いません。
_________________
囚人のジレンマな日々
Lem
会議室デビュー日: 2004/10/19
投稿数: 10
投稿日時: 2006-05-09 12:04
なせさん、回答ありがとうございます。

私はきっと上をいく若輩者です。(^^;
まだまだ、C#の概念というのでしょうか、言葉に馴染めずにいます。
自分が作っているものがインスタンスなのかどうか・・・

メインとなるフォーム上でConnectionのインスタンスを作成して・・・
となりますと、他のフォームから参照する際には、
ウィザードでのdataAdapterの作成を行うことができない(?)ので、
コードで記述することになる。
という認識でよろしいでしょうか?
それとも好みの範疇でしょうか?
Lem
会議室デビュー日: 2004/10/19
投稿数: 10
投稿日時: 2006-05-09 12:15
囚人さん、回答ありがとうございます。

サンプルコードもありがとうございます。
ただ、私のレベルでは理解できないようです。

実際にテストソフトを作ってみながら、理解しようと思います。

技術評論社から出ている本を参考に、今までは組んできたのですが、
DBから単にSelectしてくる機会が多く、リレーションも、VisualStudio内で設定できるので、
ウィザードを使い続けてきました。
コードで書くのは、Selectする際にパラメータを必要とするときだけ。

やはりコードを使ったほうが自由度は高いのですね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-05-09 12:31
囚人さんの意見に大賛成で、その都度コネクションを確立すべきです。
もし、トランザクションが跨るのであれば、引数で渡すようにします。
プログラム間レベルで跨るのであれば、設計を見直す必要があるでしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
なせ
常連さん
会議室デビュー日: 2006/01/06
投稿数: 41
お住まい・勤務地: おおさか
投稿日時: 2006-05-09 13:58
んーインスタンス。。。
言葉で説明するのはすっごい苦手ですが。
当該のものを参照できるのであれば、インスタンスは作成されています。
って感じかなw

他フォームからの参照の際
ウィザードで他のフォームのdataAdapterの参照はできるかどうかはわかりかねますが。
基本的にはコードで書くことになりますね〜。

たぶんに囚人さんの各フォームでインスタンスを持つほうがスマートっぽいです。
フォーム間でトランザクションの跨りがある場合面倒になる可能性もありますね^^;

#ちなみに囚人さんのサンプルは全然難しいことはしてませんよ。
#ただ、コネクション、アダプタ、SQLコマンドのインスタンスを作ってるだけですよ〜
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-09 14:16
以前は、起動時に接続してこれを使い回ししていたんですが、DataSet を使うこと
が主流になってからは、都度、接続するのが一般的みたいですね。
まあ、考えてみれば当然ですが・・・

なので僕も深く考えずに、必要に応じてこまめに接続してますが、接続処理自身に負
荷がかかったりしないんでしょうか?

スキルアップ/キャリアアップ(JOB@IT)