アプリ版:「スタンプのみでお礼する」機能のリリースについて

開発環境はC♯、DBはPostgreSQLです。

DBアクセス用に共通的に使うクラスを作りたいと思っています。
やりたいことは、
・接続文字列はapp.configから取得
・コネクションのプーリング(絶対ではないので出来ない、または
メリットがないのであればやらなくても構わない)

以下、途中ですが、書いてみたソースです。
--------ここから
using System;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Data.Common;
using System.Text;
using System.Data.OleDb;

namespace InventoryMngProtoType
{
class DataBaseAccess
{
//グローバル変数
string connectString;

//DB接続用共通クラス
//DataReader、DataSet…
public DataBaseAccess()
{
//接続文字列等設定
connectString = System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;

OleDbConnection con = new OleDbConnection(connectString);

//コネクションオープン
if (con.State == ConnectionState.Closed)
{
con.Open();
}

}

public DataSet Getdataset(string sql)
{
System.Data.DataSet ds = default(System.Data.DataSet);

//パラメタのSQLを投げ、データを取得、DataSetで返す。
System.Data.OleDb.OleDbDataAdapter MyCommand;
MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, connectString);

ds = new System.Data.DataSet();
MyCommand.Fill(ds);

return ds;

}

}
}
--------ここまで

--appconfigの内容
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DatabaseConnection"
connectionString="Data Source=localhost"
providerName=" PostgreSQL OLE DB " />
</connectionStrings>
</configuration>
--

まずはSQLをDataSetで返すメソッドから作ろうとしています。
コンストラクタでコネクションを開いておいて、Dispose用の
メソッドを用意して、そこで閉じるような作りを考えています。
しかし、
>MyCommand = new System.Data.OleDb.OleDbDataAdapter(sql, connectString);
ここで接続文字列が第二引数として必要なようなので、結局、
ここでもコネクションを開くことになるのでしょうか?

C♯に慣れていないため、全般、作りについてアドバイス
いただけたらと思います。
よろしくお願いします。

A 回答 (1件)

OleDBbonnectionオブジェクトメンバーに持っているなら


OleDBDataAdapterを生成するなら3番目のタイプでいいように思います
4番目の connectionStringを使うタイプが .NETのランタイムの中でコネクションを自動生成するようなことを聞いたことがあります

MyCommand = new OleDbDataAdapter( sql, con );
とします

コンストラクター内の 変数conを connectionStringと同じレベルで宣言したほうがいいでしょう
class DataBaseAccess
{
//グローバル変数
string connectString;

//DB接続用共通クラス
//DataReader、DataSet…
public DataBaseAccess()
{
//接続文字列等設定
connectString = System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;

OleDbConnection con = new OleDbConnection(connectString);


class DataBaseAccess
{
//グローバル変数
string connectString;
// 宣言をココへ移動
OleDbConnection con;

//DB接続用共通クラス
//DataReader、DataSet…
public DataBaseAccess()
{
//接続文字列等設定
connectString = System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnection"].ConnectionString;

// Connectionオブジェクトの生成
con = new OleDbConnection(connectString);

といった具合で ・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
お礼が遅れまして申し訳ありません。

おっしゃる通り、conはグローバル変数にしたほうが良いですね。
だんだんわかってきました。

お礼日時:2009/06/07 23:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!