バッチクエリ作成支援機能
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-戻る
--[[機能一覧 - フレームワーク]]
--[[バッチ処理方式]]
* 目次 [#h170136f]
#contents
*概要 [#m5f315f7]
配列バインドをサポートしていないデータプロバイダでの~
大量データ処理(バッチ更新処理)の実装のために、バッチク...
-[[SQLUtility>https://github.com/OpenTouryoProject/OpenTo...
--Datatableを渡すことで複数行に渡るINSERT文、UPDATE文を生...
-[[BaseDam>https://github.com/OpenTouryoProject/OpenToury...
--このSQLを使用して、(SQL実行のラウンドトリップを抑えた...
双方とも、パタメタ数制限をクリアするために、String型パタ...
*SQLUtilityクラス [#v3733fb1]
-SQLUtilityクラスの、GetInsertSQLParts、GetUpdateSQLParts...
-このSQLパーツを使用して、(SQL実行のラウンド・トリップを...
**GetInsertSQLPartsメソッド [#xdd3ed2c]
***サンプル・コード [#qe0b87d9]
以下、バッチ・インサートのサンプル・コード。
// データテーブル作成
DataTable dt = new DataTable();
・・・データ作成コードは省略・・・
// SQLパーツの生成
// 第2・3引数は省略可能(第2の既定値はnvarchar)。
SQLUtility su = new SQLUtility(DbEnum.DBMSType.SQLServer...
string[] strs = su.GetInsertSQLParts(dt);
// SQLパーツの組立
string collist = "";
StringBuilder sb = new StringBuilder();
foreach (string str in strs)
{
if (string.IsNullOrEmpty(collist))
{
collist = str;
}
else
{
sb.Append(str + ",");
}
}
// 最後のカンマを削る。
string temp = sb.ToString();
temp = temp.Substring(0, temp.Length - 1);
// 共通Daoでバッチ・インサート
CmnDao cd = new CmnDao(this.GetDam());
cd.SQLText = string.Format("INSERT INTO XXX{0} VALUES{1}...
cd.ExecInsUpDel_NonQuery();
***実行されるSQL [#x73ff599]
INSERT INTO XXX
([aaa],[bbb],[ccc],[ddd],[eee],[fff])
VALUES
(Convert(varchar,'a'),Convert(varchar,'aaa'),0xFF,0xFF...
(Convert(varchar,'b'),Convert(varchar,'bbb'),0xFE,0xFE...
(Convert(varchar,'c'),Convert(varchar,'ccc'),0xFD,0xFD...
**GetUpdateSQLPartsメソッド [#nd5c38cf]
***サンプル・コード [#gf3192d9]
以下、バッチ・アップデートのサンプル・コード。
// データテーブル作成
DataTable dt = new DataTable("XXX");
・・・データ作成コードは省略・・・
// SQLパーツの生成
// 第2・3引数は省略可能(第2の既定値はnvarchar)。
SQLUtility su = new SQLUtility(DbEnum.DBMSType.SQLServer...
string[] strs = su.GetUpdateSQLParts(dt, new string[] { ...
// SQLパーツの組立
StringBuilder sb = new StringBuilder();
foreach (string str in strs)
{
sb.Append("UPDATE " + dt.TableName + " " + str + ";");
}
// 共通Daoでバッチ・アップデート
CmnDao cd = new CmnDao(this.GetDam());
cd.SQLText = sb.ToString();
cd.ExecInsUpDel_NonQuery();
***実行されるSQL [#y15eb127]
UPDATE XXX
SET [bbb] = Convert(varchar,'aaa'),[ccc] = 0xFF,[ddd] ...
WHERE [aaa] = Convert(varchar,'a');
UPDATE XXX
SET [bbb] = Convert(varchar,'bbb'),[ccc] = 0xFE,[ddd] ...
WHERE [aaa] = Convert(varchar,'b');
UPDATE XXX
SET [bbb] = Convert(varchar,'ccc'),[ccc] = 0xFD,[ddd] ...
WHERE [aaa] = Convert(varchar,'c');
**BaseDamクラス [#zb600a58]
-BaseDamクラスの、ExecGenerateSQLメソッドを使用すると、SQ...
-このSQLを使用して、(SQL実行のラウンドトリップを抑えた)...
***ExecGenerateSQLメソッド [#v9a15412]
***サンプル・コード [#udb8f91a]
以下、バッチ・インサートのサンプル・コード(詳細は、[[Rer...
//Orders2テーブルに複数件まとめて追加する。
StringBuilder sb = new StringBuilder();
for (int index = 0; index < dataTable.Rows.Count; index++)
{
DataRow row = dataTable.Rows[index]; //1件分のデータ
//todo:編集処理など
// ↓DBアクセス----------------------------------------...
// 自動生成Daoを生成
DaoOrders2 dao = new DaoOrders2(this.GetDam());
// パラメータを設定
dao.PK_OrderID = row["OrderID"];
dao.CustomerID = row["CustomerID"];
dao.EmployeeID = row["EmployeeID"];
・・・
dao.ShipRegion = row["ShipRegion"];
dao.ShipPostalCode = row["ShipPostalCode"];
dao.ShipCountry = row["ShipCountry"];
// 自動生成Daoを実行
sb.Append(dao.ExecGenerateSQL(
"DaoOrders2_S1_Insert.sql", new SQLUtility(DbEnum.DB...
// ↑DBアクセス----------------------------------------...
}
// 共通Daoでバッチ・インサート
CmnDao cd = new CmnDao(this.GetDam());
cd.SQLText = sb.ToString();
cd.ExecInsUpDel_NonQuery();
***実行されるSQL [#d9b43e4c]
INSERT INTO [Orders2]
( [OrderID], [CustomerID], [EmployeeID], [OrderDate], ...
[Freight], [ShipName], [ShipAddress], [ShipCity], [S...
VALUES
( 10248, Convert(nvarchar,'VINET'), 5, '1996/07/04 00:...
3, 32.3800, Convert(nvarchar,'Vins et alcools Cheval...
Convert(nvarchar,'xxxxxx'), NULL, Convert(nvarchar,'...
INSERT INTO [Orders2]
( [OrderID], [CustomerID], [EmployeeID], [OrderDate], ...
[Freight], [ShipName], [ShipAddress], [ShipCity], [S...
VALUES
( 10249, Convert(nvarchar,'TOMSP'), 6, '1996/07/05 00:...
1, 11.6100, Convert(nvarchar,'Toms Spezialitäten'), ...
Convert(nvarchar,'Münster'), NULL,Convert(nvarchar,'440...
・・・
*参考 [#uee10eb8]
**性能測定情報 [#fe18b665]
-Open棟梁:バッチ・サンプルの性能測定に使用した、各種リソ...
https://gist.github.com/daisukenishino2/5402109ba92be11f2...
**利用ガイド(ベターユース、FAQ編) [#i3bdbf20]
-.NET用アプリケーション フレームワーク ”棟梁” 利用ガイド...
https://github.com/OpenTouryoProject/OpenTouryoDocuments/...
--4章:D層に関するトピック
---4.8.1項:SQLUtilityクラス
---4.8.2項:ExecGenerateSQLメソッド
終了行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-戻る
--[[機能一覧 - フレームワーク]]
--[[バッチ処理方式]]
* 目次 [#h170136f]
#contents
*概要 [#m5f315f7]
配列バインドをサポートしていないデータプロバイダでの~
大量データ処理(バッチ更新処理)の実装のために、バッチク...
-[[SQLUtility>https://github.com/OpenTouryoProject/OpenTo...
--Datatableを渡すことで複数行に渡るINSERT文、UPDATE文を生...
-[[BaseDam>https://github.com/OpenTouryoProject/OpenToury...
--このSQLを使用して、(SQL実行のラウンドトリップを抑えた...
双方とも、パタメタ数制限をクリアするために、String型パタ...
*SQLUtilityクラス [#v3733fb1]
-SQLUtilityクラスの、GetInsertSQLParts、GetUpdateSQLParts...
-このSQLパーツを使用して、(SQL実行のラウンド・トリップを...
**GetInsertSQLPartsメソッド [#xdd3ed2c]
***サンプル・コード [#qe0b87d9]
以下、バッチ・インサートのサンプル・コード。
// データテーブル作成
DataTable dt = new DataTable();
・・・データ作成コードは省略・・・
// SQLパーツの生成
// 第2・3引数は省略可能(第2の既定値はnvarchar)。
SQLUtility su = new SQLUtility(DbEnum.DBMSType.SQLServer...
string[] strs = su.GetInsertSQLParts(dt);
// SQLパーツの組立
string collist = "";
StringBuilder sb = new StringBuilder();
foreach (string str in strs)
{
if (string.IsNullOrEmpty(collist))
{
collist = str;
}
else
{
sb.Append(str + ",");
}
}
// 最後のカンマを削る。
string temp = sb.ToString();
temp = temp.Substring(0, temp.Length - 1);
// 共通Daoでバッチ・インサート
CmnDao cd = new CmnDao(this.GetDam());
cd.SQLText = string.Format("INSERT INTO XXX{0} VALUES{1}...
cd.ExecInsUpDel_NonQuery();
***実行されるSQL [#x73ff599]
INSERT INTO XXX
([aaa],[bbb],[ccc],[ddd],[eee],[fff])
VALUES
(Convert(varchar,'a'),Convert(varchar,'aaa'),0xFF,0xFF...
(Convert(varchar,'b'),Convert(varchar,'bbb'),0xFE,0xFE...
(Convert(varchar,'c'),Convert(varchar,'ccc'),0xFD,0xFD...
**GetUpdateSQLPartsメソッド [#nd5c38cf]
***サンプル・コード [#gf3192d9]
以下、バッチ・アップデートのサンプル・コード。
// データテーブル作成
DataTable dt = new DataTable("XXX");
・・・データ作成コードは省略・・・
// SQLパーツの生成
// 第2・3引数は省略可能(第2の既定値はnvarchar)。
SQLUtility su = new SQLUtility(DbEnum.DBMSType.SQLServer...
string[] strs = su.GetUpdateSQLParts(dt, new string[] { ...
// SQLパーツの組立
StringBuilder sb = new StringBuilder();
foreach (string str in strs)
{
sb.Append("UPDATE " + dt.TableName + " " + str + ";");
}
// 共通Daoでバッチ・アップデート
CmnDao cd = new CmnDao(this.GetDam());
cd.SQLText = sb.ToString();
cd.ExecInsUpDel_NonQuery();
***実行されるSQL [#y15eb127]
UPDATE XXX
SET [bbb] = Convert(varchar,'aaa'),[ccc] = 0xFF,[ddd] ...
WHERE [aaa] = Convert(varchar,'a');
UPDATE XXX
SET [bbb] = Convert(varchar,'bbb'),[ccc] = 0xFE,[ddd] ...
WHERE [aaa] = Convert(varchar,'b');
UPDATE XXX
SET [bbb] = Convert(varchar,'ccc'),[ccc] = 0xFD,[ddd] ...
WHERE [aaa] = Convert(varchar,'c');
**BaseDamクラス [#zb600a58]
-BaseDamクラスの、ExecGenerateSQLメソッドを使用すると、SQ...
-このSQLを使用して、(SQL実行のラウンドトリップを抑えた)...
***ExecGenerateSQLメソッド [#v9a15412]
***サンプル・コード [#udb8f91a]
以下、バッチ・インサートのサンプル・コード(詳細は、[[Rer...
//Orders2テーブルに複数件まとめて追加する。
StringBuilder sb = new StringBuilder();
for (int index = 0; index < dataTable.Rows.Count; index++)
{
DataRow row = dataTable.Rows[index]; //1件分のデータ
//todo:編集処理など
// ↓DBアクセス----------------------------------------...
// 自動生成Daoを生成
DaoOrders2 dao = new DaoOrders2(this.GetDam());
// パラメータを設定
dao.PK_OrderID = row["OrderID"];
dao.CustomerID = row["CustomerID"];
dao.EmployeeID = row["EmployeeID"];
・・・
dao.ShipRegion = row["ShipRegion"];
dao.ShipPostalCode = row["ShipPostalCode"];
dao.ShipCountry = row["ShipCountry"];
// 自動生成Daoを実行
sb.Append(dao.ExecGenerateSQL(
"DaoOrders2_S1_Insert.sql", new SQLUtility(DbEnum.DB...
// ↑DBアクセス----------------------------------------...
}
// 共通Daoでバッチ・インサート
CmnDao cd = new CmnDao(this.GetDam());
cd.SQLText = sb.ToString();
cd.ExecInsUpDel_NonQuery();
***実行されるSQL [#d9b43e4c]
INSERT INTO [Orders2]
( [OrderID], [CustomerID], [EmployeeID], [OrderDate], ...
[Freight], [ShipName], [ShipAddress], [ShipCity], [S...
VALUES
( 10248, Convert(nvarchar,'VINET'), 5, '1996/07/04 00:...
3, 32.3800, Convert(nvarchar,'Vins et alcools Cheval...
Convert(nvarchar,'xxxxxx'), NULL, Convert(nvarchar,'...
INSERT INTO [Orders2]
( [OrderID], [CustomerID], [EmployeeID], [OrderDate], ...
[Freight], [ShipName], [ShipAddress], [ShipCity], [S...
VALUES
( 10249, Convert(nvarchar,'TOMSP'), 6, '1996/07/05 00:...
1, 11.6100, Convert(nvarchar,'Toms Spezialitäten'), ...
Convert(nvarchar,'Münster'), NULL,Convert(nvarchar,'440...
・・・
*参考 [#uee10eb8]
**性能測定情報 [#fe18b665]
-Open棟梁:バッチ・サンプルの性能測定に使用した、各種リソ...
https://gist.github.com/daisukenishino2/5402109ba92be11f2...
**利用ガイド(ベターユース、FAQ編) [#i3bdbf20]
-.NET用アプリケーション フレームワーク ”棟梁” 利用ガイド...
https://github.com/OpenTouryoProject/OpenTouryoDocuments/...
--4章:D層に関するトピック
---4.8.1項:SQLUtilityクラス
---4.8.2項:ExecGenerateSQLメソッド
ページ名: