- PR -

ソースの書き方を教えてください

1
投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-04-15 14:03
下記のソースコード(OraConn)についてお聞きしたいのですが
ページの最初にOraConnを宣言し、各処理で共通に使っています。
この場合、OraConnのインスタンスの生成から破棄まで
問題ないでしょうか。
(別ユーザでOraConnがバッティングするとか、自身でバッティングするとかです)
まだC#初心者でまだよくわかってません。
よろしくお願いします。

public partial class frmMain : System.Web.UI.Page
{
   private OracleConnection OraConn = new OracleConnection("コネクション文字列");

   protected void Page_Load(object sender, EventArgs e)
   {
      OracleCommand cmd = OraConn.CreateCommand();
      cmd.CommandText = "SQL文";
      OracleDataReader objDr = cmd.ExecuteReader();
      OraConn.Open();
      OraConn.Close();

      TestFunction();
   }

   protected void TestFunction()
   {
      OracleCommand cmd = OraConn.CreateCommand();
      cmd.CommandText = "SQL文";
      OracleDataReader objDr = cmd.ExecuteReader();
      OraConn.Open();
      OraConn.Close();
   }

   protected void cmdTest_Click(object sender, EventArgs e)
   {
      OracleCommand cmd = OraConn.CreateCommand();
      cmd.CommandText = "SQL文";
      OracleDataReader objDr = cmd.ExecuteReader();
      OraConn.Open();
      OraConn.Close();
   }

   protected void Page_UnLoad(object sender, EventArgs e)
   {
      OraConn.Dispose();
   }
}



[ メッセージ編集済み 編集者: 未記入 編集日時 2006-04-15 14:04 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-15 14:12
別に問題はなさそうですが、以下のようにすると余計な心配はなくなるでしょう。

コード:
public partial class frmMain : System.Web.UI.Page 
{
      private string _connectionString = "コネクションストリング";

   protected void Page_Load(object sender, EventArgs e) 
   {
            using( OracleConnection con = new OracleConnection( _connectionString ) )
            {
                using( OracleCommand cmd = con.CreateCommand() )
                {
              cmd.CommandText = "SQL文"; 
                    con.Open();
              OracleDataReader objDr = cmd.ExecuteReader(); 
                }
            }
      TestFunction(); 
   } 
}



スコープは可能な限り狭く。
_________________
囚人のジレンマな日々
未記入
ベテラン
会議室デビュー日: 2005/07/14
投稿数: 66
投稿日時: 2006-04-15 15:16
どうもありがとうございます。
ソース自体には問題ないのですね。
コネクションのバッティングを気にしていましたので
安心しました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-15 17:00
引用:

未記入さんの書き込み (2006-04-15 15:16) より:

ソース自体には問題ないのですね。
コネクションのバッティングを気にしていましたので安心しました。


私は、問題が「全くない」とは思わないですけど...
未記入さんの元のコードはプライベート メンバですから。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-04-15 23:27
引用:

私は、問題が「全くない」とは思わないですけど...
未記入さんの元のコードはプライベート メンバですから。


あれ?駄目かな。
確かに100%問題なし!と言えないけど、明確にココに問題あり!と言えないのが辛い…。
微妙に変な気持ちにはなりますね。

.NET2.0 になって、TransactionScope も使える事だし(まだあまりよく分からんが)、コネクションを使いまわす意味もあまりなくなったような気がするなぁ。

スコープを狭くする方にリファクタリングしたらどうですか?>未記入さん

_________________
囚人のジレンマな日々
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-04-16 01:32
引用:

囚人さんの書き込み (2006-04-15 23:27) より:
.NET2.0 になって、TransactionScope も使える事だし(まだあまりよく分からんが)、コネクションを使いまわす意味もあまりなくなったような気がするなぁ。


まあ、もともとのコードでもコネクション「オブジェクト」を
使いまわしていることにはあまり意味はないですね。

元のコードで言えば、まあ確実にCloseされるようにするとかですかね。
質問者さんが気にしているような、バッティングとかの心配はないでしょう。
で、スコープとかややこしいこと気にするくらいならその場で作成したほうがいいでしょう。
後々トランザクションを共有するように変更するつもりなどがないのであれば、ですが。

あそうそう、気になるのはなんでOpenせずにリーダー使って、
その後でOpen、Closeしてるのか、ですね。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-16 09:24
ぉぉ、見てなかったですね...
DataAdapter ならまだしも、DataReader では動かないような。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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