- PR -

【解決済】ASP.NETでの独自クラスインスタンスの破棄タイミング

1
投稿者投稿内容
垣根提督
会議室デビュー日: 2009/02/25
投稿数: 2
投稿日時: 2009-02-25 11:44
VB開発ではいつもお世話になっております。

現在以下の環境でASP.NETによるWEBページの作成を行っております。

■OS:WindowsXP SP2
■開発ツール:Visual Studio 2008 SP1
■言語:VB
■DB:SQLServer2005 Developer Edition
■ブラウザ:IE6
■IIS:未インストール

VBにてデータアクセスを行う独自クラスを作成し、
WEBページ上のボタンを押下したときにボタンクリックイベントで、
「独自クラスをインスタンス化し、コンストラクタで接続文字列を渡して接続オープン」
を行ったのですが、
ボタンクリックイベントが終了しても独自クラスのインスタンスが破棄されていないせいなのか、
DBとの接続がオープンしたままとなってしまいました。
(ボタンを2回押すと「既にオープンしています」でエラーとなる)

同じことをWindowsのフォームアプリケーションで行うと、
こちらはボタンクリックイベントを終了するとDB接続が自動でクローズされます。
(ボタンを2回押してもエラーとならない)

<ボタンクリックイベントのコード>

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim insTEST As New ClassDbTEST("Provider=SQLNCLI.1;Data Source=TEST;Integrated Security=SSPI;Initial Catalog=TEST")

insTest.DBアクセス処理

End Sub

End Class


クラスインスタンスの自動破棄について
WEBアプリケーションとWindowsフォームアプリケーションで何か違いがあるのでしょうか?
何かご存知の方おりましたら、ヒントだけでも頂けますよう宜しくお願いいたします。

[ メッセージ編集済み 編集者: 垣根提督 編集日時 2009-02-25 11:45 ]

[ メッセージ編集済み 編集者: 垣根提督 編集日時 2009-02-27 18:19 ]
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-02-25 12:02
ヒントになるかわかりませんが・・・。

1.明示的に接続を Close していますか?
  (クラスが破棄されるはずだから勝手に Close されるんじゃないかと言う期待をせずに)
2.静的なオブジェクトで接続を保持していませんか?
垣根提督
会議室デビュー日: 2009/02/25
投稿数: 2
投稿日時: 2009-02-25 12:16
早速のご回答ありがとうございます。

ご指摘により原因判明し解決致しました;;

独自クラスでコネクションオブジェクトを「Shared」で定義していたことが
原因だったようです。

この原因だとするとWindowsフォームアプリケーションでも
同現象が発生します。
発生しないと質問で書いたのは別のコードで試したからでした。
まぎらわしいことを記載してご迷惑をお掛けし申し訳ありません。

また、明示的なクローズは行っていませんでした。

[ メッセージ編集済み 編集者: 垣根提督 編集日時 2009-02-25 12:17 ]
1

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