- PR -

Webプロジェクトでのデータベースオープンについて

投稿者投稿内容
ルーキー
常連さん
会議室デビュー日: 2006/05/08
投稿数: 20
投稿日時: 2007-06-01 15:14
Webプロジェクト初心者です。よろしくお願いします。

VB.NET 2003 でWebプロジェクトを作成しています。
ADOを使用してSQLデータベースをオープンしているのですが、
ページが変わると当然ですが、DIM宣言しているDatabaseConnectionはなくなってしまいます。
そこで、ページロードするたびにオープンしてアンロードするときに閉じるのを
繰り返して使用する。(DIM宣言)
もしくは、Public関数で宣言し、同じアプリケーションに接続するユーザー全員で
共有してしようするのとではどちらの方が良いのでしょうか?
どちらも試してみましたが、テストした少人数ではどちらでも問題なく動きます。
多数のユーザーが同時に利用する場合などを考えて、
どちらで宣言するのがよいのかアドバイスいただけますか?
また、上記以外の別の良い方法があればそちらも教えていただけると幸いです。

burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-06-01 15:53
Publicにしても別セッションのユーザーとはコネクションを共有しえることにはなりません。
ADO.NETはコネクションプーリングの機能が実装されているので、
DBアクセス毎にコネクションのOpenとCloseをする方法で問題ありません。
イシバシ
常連さん
会議室デビュー日: 2007/02/06
投稿数: 20
お住まい・勤務地: 浦安の隣
投稿日時: 2007-06-01 15:54
こんにちは。
引用:

Public関数で宣言し、同じアプリケーションに接続するユーザー全員で
共有してしようする



私はてっきり、ユーザー個別のセッションを横断してオブジェクトを共有するなんて出来ないと思っていました。
別セッションでデータベース接続を共有する方法があるのなら是非教えて頂きたいです。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-06-01 16:26
引用:

私はてっきり、ユーザー個別のセッションを横断してオブジェクトを共有するなんて出来ないと思っていました。
別セッションでデータベース接続を共有する方法があるのなら是非教えて頂きたいです。



コネクションプーリングを使用してるってことは、ユーザー個別のセッションを横断して接続情報を共有してることとなると思いますが。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-06-01 16:42
セッションを横断してるわけじゃなくて単に振り分けているといったほうが正しいと思っていたのだが。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2007-06-01 16:42
PageクラスにApplicationというプロパティがありますが、これはアプリケーション全体で共有するオブジェクトを格納しておけます。
アプリケーションはサーバー上に一つだけ存在しますので、複数のユーザーでオブジェクトを共有することになります。

でもConnectionオブジェクトを使い回すってのはだめですね。
使い終わったら捨ててください。
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-06-01 16:57
コネクションプーリングを行ってる環境での
Connection.Close()は接続を切断しているわけではなく接続をプールに戻すだけ。
逆にConnection.Open()は接続を確立しているとは限らず、プールに使用できる接続がある場合は、それを使い回す。(本当は難しいアルゴリズムらしい)
「セッションを横断」って表現が正しいかはわからないけど、別セッションでも同じ接続を使う可能性はあるし、スレ主が言ってる「同じアプリケーションに接続するユーザー全員で
共有してしようする」
ってのはコネクションプーリングが勝手にやっているってことだと思います。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-06-01 17:14
引用:

burton999さんの書き込み (2007-06-01 16:57) より:
コネクションプーリングを行ってる環境での
Connection.Close()は接続を切断しているわけではなく接続をプールに戻すだけ。
逆にConnection.Open()は接続を確立しているとは限らず、プールに使用できる接続がある場合は、それを使い回す。(本当は難しいアルゴリズムらしい)
「セッションを横断」って表現が正しいかはわからないけど、別セッションでも同じ接続を使う可能性はあるし、スレ主が言ってる「同じアプリケーションに接続するユーザー全員で
共有してしようする」
ってのはコネクションプーリングが勝手にやっているってことだと思います。


ごめんです。知っていてあえて書いてるです。
同じ接続を使っているという表現なら納得です。

[ メッセージ編集済み 編集者: ぶさいくろう 編集日時 2007-06-01 17:18 ]

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