- - PR -
fracod3746
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-21 12:08
現在下記環境で開発を行っております。
開発OS:Windows XP 開発ソフト:Visual Web Developer ASP.NET データベース:SQL Server 2005 実行環境:Windows Server 2003(IIS6.0) webページを表示して、ボタンをクリックするとデータベースにデータを追加する ソフトを開発しております。 ボタンを押す度にDbConnectionをOPENするのではなく、ページが開いた時に1度だけ DbConnectionをOPENする構想で開発しています。 下記のソースでデータベースへの書き込みは実現できたのですが、困っているのは、 DbConnection dbをCloseするタイミングを、どこにするかということです。 例えばユーザがウインドウの×ボタンを押して、ブラウザを終了させたり、エラーで ブラウザが落ちた場合に、db.Close();を行わなかったらWebサーバ上のメモリの開放が 行われないように思われます(少なくとも私が調べた限り)。 Button1をClickした際の処理にDbConnection Open→SQL実行→DbConnection Closeとすれば 何の問題もないのですが、これだとボタンを押す度に、DbConnection Openされる ので、1度で済むのであれば、ページを開いた時に1度だけDbConnection Openしたいなと 思っております。 ページを開いた時にDbConnection Openするという構想が無理で、ボタンを押したときに DbConnection Openするしかないのでしょうか? この件に関して、何かご存知の方がいらっしゃれば、何でも構いませんので、ご意見を お願いします。 ------------------------------------------------------------------------------ public class Databasesetsuzoku { public static ConnectionStringSettings setting; public static DbProviderFactory factory; public static DbConnection db; //データベース接続メソッド public static void DatabasesetsuzokuMethod() { setting = ConfigurationManager.ConnectionStrings["testConnectionString"]; factory = DbProviderFactories.GetFactory(setting.ProviderName); db = factory.CreateConnection(); db.ConnectionString = setting.ConnectionString; db.Open(); } } public partial class page03 : System.Web.UI.Page { //staticコンストラクタ static page03() { //データベース接続メソッド Databasesetsuzoku.DatabasesetsuzokuMethod(); } protected void Button1_Click(object sender, EventArgs e) { //新規登録 DbCommand comm = Databasesetsuzoku.factory.CreateCommand(); comm.Connection = Databasesetsuzoku.db; comm.CommandText = insert文; //SQL実行 comm.ExecuteReader(CommandBehavior.CloseConnection); } } ------------------------------------------------------------------------------ | ||||||||||||||||
|
投稿日時: 2007-06-21 12:18
Webプロジェクトでのデータベースオープンについて - Insider.NET
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38813&forum=7 | ||||||||||||||||
|
投稿日時: 2007-06-21 13:10
どうしてまた、そういう構想にたどり着いたのでしょうか? 多くのサンプルや教本類が、逐次の接続を示唆あるいは明示しているはずです。
多くの場合それが妥当です。 DB 接続のコードが他のハンドラと重複するのを避けたいのであれば、
のようなヘルパ関数を作って
のように使えばいいんじゃないでしょうか。 | ||||||||||||||||
|
投稿日時: 2007-06-21 13:36
burton999さん、渋木宏明(ひどり)さん、返信ありがとうございます。
> どうしてまた、そういう構想にたどり着いたのでしょうか? > 多くのサンプルや教本類が、逐次の接続を示唆あるいは明示しているはずです。 burton999さんが示してくれたリンク先を見る限りでも、ボタンをクリックする度に 接続→データ追加→接続解除とするのが最も安全なようですね。 「ページを開いた時に接続」と構想したのは、何度も接続、解除を繰り返すのは サーバ側に負荷がかかると思ったからでして、方法があるのであれば、接続は 一度きりにしたいと考えた次第であります。 コネクションプーリングは全く意識していなかったので、それも踏まえて、もう一度 考え直してみます。 ありがとうございました。 |
1