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

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

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

Re[4]: データベース接続用クラスについて


(過去ログ 94 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■56470 / inTopicNo.1)  データベース接続用クラスについて
  
□投稿者/ ぽん (68回)-(2011/01/14(Fri) 15:57:25)

分類:[C#] 

お世話になっております。

今回「データベースからデータを取得」「データベースの更新」
を行うクラスを作成してみたのですが、少し使いにくいので、皆さんにアドバイスを頂きたく質問致しました。

環境 windows7 visual C# SQLServer2008 Expressになります。

以下、クエリを送ってDataSetを返すメソッドと、DataSet渡してデータベースを更新するメソッドを持つクラスになっています。

namespace ×××
{
    class SQLServerConnection
    {
        readonly static string DataSource = @".\SQLEXPRESS;";
        readonly static string IntegratedSecurity = "True;";
        readonly static string ConnectTimeOut = "30;";

        private string connectionString;

        #region Constructor
        /// <summary>
        /// 接続文字列を作成する。
        /// </summary>
        /// <param name="fileName">mdbファイルのファイル名(フルパス)</param>
        public SQLServerConnection(string fileName)
        {
            this.connectionString =
                @"Data Source = " + DataSource +
                @"AttachDbFilename = " + fileName + ";" +
                @"Integrated Security = " + IntegratedSecurity +
                @"Connect Timeout = " + ConnectTimeOut;
        }
        #endregion

        #region public Method
        /// <summary>
        /// データセットにクエリ結果をセットする。
        /// </summary>
        /// <param name="dataset">空のデータセット</param>
        /// <param name="queryString">クエリ文</param>
        /// <param name="tableName">データテーブル名</param>
        /// <returns>データセット</returns>
        public DataSet SelectRows(string queryString, string tableName)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = new SqlCommand(queryString, connection);
                DataSet dataset = new DataSet();
                adapter.Fill(dataset, tableName);

                return dataset;
            }
        }

        /// <summary>
        /// クエリ結果を元にデータベースの更新を行う。
        /// </summary>
        /// <param name="dataset">空のデータセット</param>
        /// <param name="queryString">クエリ文</param>
        /// <param name="tableName">データテーブル名</param>
        /// <returns>データセット</returns>
        public void SelectSqlRows(DataSet dataset, string queryString, string tableName)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = new SqlCommand(queryString, connection);
                SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
                adapter.Update(dataset, tableName);
            }
        }
        #endregion
    }
}

ただこのクラスですと、DataSetにクエリ結果を取得するまではいいのですが、
もし既にDataSetにクエリ結果が取得されている場合でも、もう一度同じクエリをデータベース更新用メソッドに
渡してやらなければならず、あまり汎用性がないため、クラスを上手変更出来ないものかと思い質問しました。
よろしくお願い致します。

引用返信 編集キー/
■56471 / inTopicNo.2)  Re[1]: データベース接続用クラスについて
□投稿者/ マサヤ (213回)-(2011/01/14(Fri) 16:19:35)
呼び出し側の処理をみないとなんともいいずらいのですが、SqlConnection はOpenしなくても問題ありませんでしたか?
引用返信 編集キー/
■56472 / inTopicNo.3)  Re[2]: データベース接続用クラスについて
□投稿者/ ぽん (70回)-(2011/01/14(Fri) 16:41:15)
No56471 (マサヤ さん) に返信
> 呼び出し側の処理をみないとなんともいいずらいのですが、SqlConnection はOpenしなくても問題ありませんでしたか?

マサヤ様お世話になります。

呼び出し側のコードは以下のような感じになっています。

private 何らかのイベント(object sender, EventArgs e)
{
    SampleConnection scn = new SampleConnection(DBFileName);
    DataSet ds = scn.SelectRows("select * from sample", "sample");
    DataTable dTbl = ds.Tables["sample"];
    
    DataRow dRow = dTbl.NewRow();
    dRow["id"] = 1;
    dRow["name"] = "×××";

    dTbl.Rows.Add(dRow);
    scn.SelectSqlRows(ds, "select * from sample", "sample");
}

取りあえずデータベースに更新はされていますが、openしないと問題がありますでしょうか?

引用返信 編集キー/
■56473 / inTopicNo.4)  Re[3]: データベース接続用クラスについて
□投稿者/ マサヤ (214回)-(2011/01/14(Fri) 16:45:16)
SQLServerConnectionがSampleConnectionに代わってる時点で違うクラスを呼び出してる気がします。
http://support.microsoft.com/kb/308507/ja
ここを読んでみてください。
引用返信 編集キー/
■56475 / inTopicNo.5)  Re[4]: データベース接続用クラスについて
□投稿者/ ぽん (71回)-(2011/01/14(Fri) 17:33:45)
No56473 (マサヤ さん) に返信
> SQLServerConnectionがSampleConnectionに代わってる時点で違うクラスを呼び出してる気がします。
> http://support.microsoft.com/kb/308507/ja
> ここを読んでみてください。

すみません。。。
コード貼り付ける際に間違ってしまいました。。。orz

正しくはSQLServerConnectionです。申し訳ございません。

リンク先も今から読んでみます!

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -