|
分類:[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(); }
|