C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■85669 / )  フィールド名の値について
□投稿者/ ピカチュウ (1回)-(2017/11/13(Mon) 23:13:24)

分類:[C#] 

C# VS2017 Windows7

入力した情報をDBを通して登録(Insert)するコードを作っています。

本題ですが、初めのloadイベント(確認)はコネクションの情報(接続文字列)が反映されています。
次はボタンイベント(登録)では、接続文字列の情報が反映されていませんでした。

切断するときにDisposeしたので初期化されたので当然ですが、初期化されても、ボタンイベントはloadイベントも同じフィールド名から値を格納しているのかなと思いました。
フィールドの宣言で、一度しか情報が反映されないのでしょうか?

接続文字列はインスタンス共通なので、staticにしました
usingにすれば簡単に解決できるが、接続と切断のメソッドを分けているのは、form1のInsertループがあるので、何回も接続・切断ではサーバーが負担になるので避けています。
また、切断はClose()のみにすれば接続文字列は保持したまま通りますが、Disposeしないと問題はありますか?
登録する時間はバラバラですが、1分間に何回も登録連続したり、間をおいて(10分ぐらい?)、1分間に何回も登録、繰り返しの流れです。

SQL_ClassはSQL用と接続文字列などのDB関係をまとめて書き込んでいます。
ほかのクラスでは書き込んではいないです。

どうすれば、インスタンス共通で、loadイベントとボタンイベントでconnectionの値を反映するのでしょうか?
ご教示の程よろしくお願いします。

class SQL_Class
{
  //接続文字列情報 
private static OracleConnection connection = new OracleConnection(GetConnection());

  //DB接続
public static bool isDB_Open()
{
try
{
if(connection.State == ConnectionState.Closed)
{
connection.Open();
}
return true;
}
catch(Exception ex)
{
DB_Close();
return false;
}
}

//DB切断
public static void DB_Close()
{
try
{
connection.Close();
connection.Dispose();
}
catch(Exception ex)
{

}
}
}


//form1
private void Form1_Load(opject sender, EventArgs e)
{ 
    //接続確認
if(SQL_Class.isDB_Open())
{
this.lableMessage.Text = "接続は成功しました"
    }
else
{
this.lableMessage.Text = "接続は失敗しました"
    }

    //切断
SQL_Class.DB_Close();
}

//ボタン
private void Form1_button1(opject sender, EventArgs e)
{
//接続
if(SQL_Class.isDB_Open() == false)
{
this.lableMessage.Text = "接続は失敗しました"
return;
    }
    
    //いろいろな処理
//ここでループしながらDBで追加(Insert)している

    //切断
    SQL_Class.DB_Close(); 
  }
返信 編集キー/


管理者用

- Child Tree -