QA@IT

ソフトウェアとデータベースに関する質問です。C#で作成しようと考えています。

3753 PV

ソフトウェアを起動しているとき、データベース(sql server)につなぎ、ソフトが終了とともにデータベースの接続を切るように設計しようと思っています。このような設計はいろいろな面でよいのかどうかよくわからないのでご教授をお願いします。Windows 8 pro C# vs2012の環境です。漠然とした質問ですいません。よろしくお願いします。

回答

なんだか数年前の自分を見るようだ……
基本的な使い方としたら、まず頭に

using System.Data.SqlClient;

を入れておいて、

//SQLコマンド用汎用変数
string strConnectionString = "Data Source = 192.168.1.10;Initial Catalog = temptable;Persist Security Info = True;User ID = sa;Password = abcde;";

を宣言しておいて、

//メインコード
using (var sqlConnectionDB = new SqlConnection(strConnectionString)) {
    sqlConnectionDB.Open();
    using (var sqlCommandDB = sqlConnectionDB.CreateCommand()) {
        sqlCommandDB.CommandText = "SELECT name FROM usertable WHERE id = 'inoue'";
        using (var sqlReaderDB = sqlCommandDB.ExecuteReader()) {
            while (sqlReaderDB.Read()) 
            { textbox1.Text += sqlReaderDB.GetSqlValue(0).ToString() + "\n"; }
        }
    }
}

ってかんじにするとOKです。

編集 履歴 (2)
  • 上のコードですと、例外が発生して処理が中断してしまった場合、接続が Open したままになり、コネクションリークの問題が発生します。お手本としてコードをかかれるなら、その辺りの対処を含めて書いた方がよろしいのでは? -
  • あ、はい、実際に書くときはtry~catch~finallyとか入れたがいいと思います。下の「.NETの例外処理 Part.1」に書いてあるので省略してます。 -
  • ありがとうございます。やってみます。 -

データベース(sql server)につなぎ、ソフトが終了とともにデータベースの接続を切るよう
に設計しようと思っています。

つなぐ/切るというのはどういう意味ですか? DB への接続を Open/Close すると言う意味だとすると、アプリを立ち上げた時点ではなくその後の DB を使う直前に Open して、アプリの終了時点ではなく使い終わったら即 Close するのが基本です。

それから、非常に重要なこととして、例外が発生して処理が中断してしまっても必ず Close する(コネクションリークを防止する)処理は必須です。

以下のページが参考になると思います。接続の Open/Close、コネクションリーク防止については Part.2 に書かれていますが、Part.1 に書かれている例外処置と密接な関係がありますので、Part.1 から目を通すことをお勧めします。

.NETの例外処理 Part.1
http://blogs.msdn.com/b/nakama/archive/2008/12/29/net-part-1.aspx

.NETの例外処理 Part.2
http://blogs.msdn.com/b/nakama/archive/2009/01/02/net-part-2.aspx

・・・と、ここまで書いて気がつきましたが、Part.2 は以前の質問者さんのスレッド http://qa.atmarkit.co.jp/q/3632 で紹介してます。読んでないでしょ?

編集 履歴 (0)
  • すいません。よくわかっていないので、ご親切にありがとうございます。 -
  • よくわからないのはやむを得ないとして、そうであれば何が分からないか書いてはどうですか? 質問者さんが質問したことが意味がないし、回答者の方も回答が全く無駄になったようで不愉快です。 -
  • 失礼しました。今後このようなことがないよう気をつけます。 -
  • 本当に不愉快な気持ちにさせてしまい、大変反省しております。未熟な私ですが、ご教授していただければ幸いです。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。