dataAccess | セクション名 |
defaultConnectionTimeout | 接続タイムアウトの既定値。設定要素に設定されていない場合の既定値とする。接続がタイムアウトするまでの時間を秒で指定する。 |
defaultCommandTimeout | クエリーコマンドタイムアウトの既定値。設定要素に設定されていない場合の既定値とする。クエリーコマンドがタイムアウトするまでの時間を秒で指定する。 60秒以上は指定しない。ここにそれ以上の値を指定しなければ動作しないシステムは設計がおかしいか配置がおかしいか他何かが間違っている。 |
addタグにより個別の接続に対する設定を記述する。
name | 設定要素名。重複は許されない。"default"の名前を持つ設定要素が必ず1つ必要。"/"(スラッシュ)で区切った文字を指定する事でプログラムからの設定名称指定を柔軟に出来る。 |
className | 実際に使用するConnectionの実装クラス名を記述する。 |
url | 接続先のURLを記述する。webサービスの場合は http://exapmle.com:8000/service/function.aspx のような形式になる。 |
database | 接続先のデータベース名を記述する。webサービスの場合は 使用しない。 |
user | 接続先のデータベースを使用するためのユーザー名を記述する。webサービスの場合は基本認証またはダイジェスト認証のためのユーザー。 |
password | 接続先のデータベースを使用するためのパスワードを記述する。webサービスの場合は基本認証またはダイジェスト認証のためのパスワード。 |
quoteStyle | 引用記号処理のためのスタイルを記述する。0:SQLサーバー(シングルクォーテーションを二重化、ワイルドカード文字を"[]"(ブラケット)で囲む) |
commandTimeout | この接続でのクエリーコマンドタイムアウトの既定値。クエリーコマンドがタイムアウトするまでの時間を秒で指定する。記述しない場合は基本設定項目の値を使用する。長い値を指定してはならない。ほとんどのクエリーに300秒などありえない。 |
defaultConnectionTimeout | この接続での接続タイムアウトの既定値。接続がタイムアウトするまでの時間を秒で指定する。記述しない場合は基本設定項目の値を使用する。 |
encryptUser | ユーザー名、パスワードを暗号化するか。デフォルトはtrue。 |
option | 上記に現れないオプション。SqlServerなら統合認証モード使用、接続プール数など |
SQLサーバーに接続するデフォルト接続、webサービスに接続する"webservice"接続。
<dataAccess defaultConnectionTimeout="15" defaultCommandTimeout="45">
<add name="default"
className="CFW.Database.SqlServer.SqlServerConnection,CFW.Database"
url="dbserver.example.com"
database="sampledb"
user="sample"
password="sample"
quoteStyle="0"
commandTimeout="15"
connectionTimeout="15"
option=""
/>
<add name="webservice"
className="CFW.Database.DbWebServiceReference.DbWebServiceReference,CFW.Database.DbWebServiceReference"
url="http://webservice.example.com/webservice.asmx"
database=""
user="sample"
password="sample"
quoteStyle="0"
commandTimeout="15"
connectionTimeout="15"
option=""
/>
</dataAccess>
データベース実体への操作を行う。
データ接続の操作は以下の手順で行う。
CFW.Database.ConnectionFactory を使用してCFW.Database.Connection オブジェクトを受け取る。
GetConnectionByNameは次のような指定が可能
Connection#Open()を呼び出し接続を開く
処理内容により適宜 Connection#BeginTransaction()を呼び出しトランザクションを開始する。
Connection#ExecuteQuery,Connection#ExecuteUpdateなどを使用してデータベース操作を実行する。
または別のDataAccessクラス・TableAccessクラスのデータベース操作メソッドを使用する。
ExecuteQuery | 選択Commandを実行し、結果をDataSetで返す。 |
ExecuteQueryAsTableRows | 選択Commandを実行し、結果を指定したTableRow型のリストで返す。 |
ExecuteUpdate | 更新系Commandを実行し、影響を受けた行数を返す。またはストアドプロシージャのリターン値を返す。 |
ExecuteReader | (webサービスとデータ接続実体を統合して扱う都合上実装は存在するが使用できない) |
ExecuteQueryBatch | 選択Commandの配列を個別に実行し、全ての結果を一つのDataSetにまとめて返す。 |
ExecuteUpdateBatch | 更新系Commandの配列を個別に実行し,影響を受けた行数を返す。またはストアドプロシージャのリターン値を返す。 |
Insert | TableRowオブジェクトをテーブルに挿入する。 TablePropertiesの各フィールドのDoUpdateプロパティをtrue/falseに設定する事で挿入対象列を指定できる(対象にしない列はテーブルのデフォルト値が設定される)。 |
Update | TableRowオブジェクトの内容でテーブルを更新する。選択対象は指定オブジェクトの主キー、または他の検索条件。 TablePropertiesの各フィールドのDoUpdateプロパティをtrue/falseに設定する事で更新対象列を指定できる。 |
Delete | TableRowオブジェクトの主キー情報に該当する行をテーブルから削除する。または他の検索条件に該当する。行をテーブルから削除する。 |
Get | TableRowオブジェクトの主キー情報に該当する行を取得する。 |
GetList | 指定検索条件に該当する行のリストを取得する。 |
Insert | エンティティを追加する。 |
Update | エンティティを更新する。 |
Delete | エンティティを削除する。 |
Get | エンティティを取得する。 |
GetList | エンティティのリストを取得する。 |
開始されたトランザクションがあるなら Connection#RollbackTransaction() または Connection#CommitTransaction() を呼び出しトランザクションを終了する。
Connection#Close()を呼び出し接続を閉じる
データベース操作のためのコマンド。クエリー文字列またはストアドプロシージャ名とパラメータからなる。
開かれているConnectionオブジェクトのExecute**** メソッドを呼び出す。
動的パラメータをクエリー文字列内に直接記述しない。必ずパラメータクエリーを作成し、Parameterオブジェクトを使用する。
テーブル単体の直接操作クエリーは避け、TableAccessクラス(t2m.exeにより自動生成)を通して操作する。
TableAccessクラスのGetメソッドを使用する。
TableAccessクラスのGetListメソッドを使用する。
TableAccessクラスのInsertメソッドを使用する。
TablePropertiesクラスの各フィールドのDoUpdateフラグを設定する事で対象列を選択できる。
TableAccessクラスのUpdateメソッドを使用する。
TableCommandConditionクラスを使用することで対象行を選択できる。
TablePropertiesクラスの各フィールドのDoUpdateフラグを設定する事で対象列を選択できる。
TableAccessクラスのDeleteメソッドを使用する。
TableCommandConditionクラスを使用することで対象行を選択できる。
クエリー記述時、選択列に 「テーブル別名 + "__"(アンダースコア2個) + 元の列名」からなる別名をつける。TableRowオブジェクトまたはエンティティへの展開はTableRowクラスのFromDataRowを使用する。
TableSelectCommandクラスを使用してCommandを組み立てる。TableRowオブジェクトまたはエンティティへの展開はTableRowクラスのFromDataRowを使用する。
特定ドメインモデルのデータアクセスのためにDataAccessクラスを作成する。
Connection connection = ConnectionFactory.GetConnectionByName("default");
connection.Open();
try{
string query = @"select * from MST_CITY where CITY_CODE=@cityCode";
Command command = new Command(query,CommandType.Text);
command.SetParameter(new CFW.Database.Parameter( "@cityCode",DbType.String,"1"));
DataSet result = connection.ExecuteQuery(command);
}
catch(Exception ex){
ErrorHandler handler = ErrorHandler.GetInstance(ex);
handler.WriteLog();
}
finally{
connection.Close();
}
Connection connection = ConnectionFactory.GetConnectionByName("default");
connection.Open();
try{
string query = @"update MST_CITY set AREAS_CODE = @areasCode where CITY_CODE=@cityCode";
Command command = new Command(query,CommandType.Text);
command.SetParameter(new CFW.Database.Parameter( "@areasCode",DbType.String,"JPN"));
command.SetParameter(new CFW.Database.Parameter( "@cityCode",DbType.String,"1"));
int result = connection.ExecuteUpdate(command);
}
catch(Exception ex){
ErrorHandler handler = ErrorHandler.GetInstance(ex);
handler.WriteLog();
}
finally{
connection.Close();
}
//設定要素"draft"に記述された接続設定を使用する。
Connection defaultConnection = ConnectionFactory.GetConnectionByName("default");
//設定要素"A001/PM/DRAFT"に記述された接続設定を使用する。
//ここではC#の可変引数機能を使用して"/"区切り要素を渡す。
Connection specialCompanyConnection = ConnectionFactory.GetConnectionByName("A001","PM","DRAFT");
Connectionクラスはデータベースエラー他が発生した場合CFW.Database.ConnectionExceptionを送出する。
Message | 例外メッセージ。SQLサーバーの場合元の例外メッセージ |
ErrorNumber | データベースで設定されているエラー番号。SQLサーバーの場合sysmessagesテーブルのid |
State | メッセージ内容を識別する数字。SQLサーバーの場合のみ。 |
Server | エラーの発生したデータベースサーバー。SQLサーバーの場合のみ。 |
Procedure | 実行したストアドプロシージャ名。SQLサーバーの場合のみ。 |
LineNumber | エラーの発生した行番号。SQLサーバーの場合のみ。 |
Commands | 実行したCFW.Database.Commandのリスト。 |
例外時のログ出力は CFW.Database.ConnectionExceptionHandler#WriteLogに実装されている。上記内容を全てログに出力する。
実装されていない種類のデータ接続クラスを作成する場合、CFW.Database.Connection を継承するクラスを作成し抽象メソッドを実装する。
Open | 設定内容から接続の実体(SqlConnection,OracleConnectionなど)を生成し、開く。 |
BeginTransaction | 接続実体に対応したトランザクションオブジェクトを生成し、トランザクションを開始する。 |
CommitTransaction | 既に開始されているトランザクションをコミットする。 |
RollbackTransaction | 既に開始されているトランザクションを破棄する。 |
CreateDbCommand | 接続実体に対応したIDbCommandをCommandオブジェクトの内容で生成する。 |
CreateDataAdapter | 接続実体に対応したIDataAdapterを生成する。 |
SystemDate | 接続実体に対応した現在時間取得クエリーを実行し、日付を返す |
実装されているが処理内容を変更する場合は適宜オーバーライドする。