|
分類:[C#]
お疲れ様です。 質問をお願い致します。
OS:WindowsXP DB:Oracle10g,Access2003 IDE:VisualStudio2008
以下のようなメソッドで、MDBファイルを作成し、Oracle10gDBより、取得したデータをMDBファイルのテーブルに書き込んでおります。 MDBファイル、TBL、データ作成は、想定通り行われるのですが、何故か1レコード目だけが作成されません。 デバックで確認すると、DBよりデータは取得できていて、ループも5回実行されています。 分からないことに、Oracle用のSQLを宣言している箇所から、コネクションのクローズメソッドまでの間にブレークポイントを張り、デバックを開始します。 一度、ブレークポイントでストップしてから「デバック開始」を実行すると、想定通り、全てのレコードが出力されます。 このような現象を、ご存知の方がいらっしゃいましたら、アドバイスをお願い致します。
・予想結果 TEST_TBL.TEST_CD 01 02 03 04 05
・実際の結果 02 03 04 05
public void createItemTypeTbl(OracleCommand cmd, Context context) { try { //MDBコネクション作成 /*@"Provider=Microsoft.Jet.OLEDB.4.0;"+ "Data Source=C:\\DB\\DB.MDB;"に設定しています*/ OleDbConnection mdbConnect = new OleDbConnection(Constant.MDB_CONNECTION); //MDB登録SQLの設定 String insertSql = @"INSERT INTO TEST_TBL VALUES( :pTEST_CD )"; //DBコマンドの設定 OleDbCommand mdbCommand = new OleDbCommand(insertSql, mdbConnect);
//カタログの宣言 ADOX.CatalogClass catalog = (ADOX.CatalogClass)context[Constant.CATALOG];
// テーブルを作成する(T_HD_M_ITEM_TYPE) ADOX.TableClass table = new ADOX.TableClass(); //テーブルをカタログに登録する前に、固有の設定を行う table.ParentCatalog = catalog; //テーブル名の設定 table.Name = "TEST_TBL";
// 品目種コード列の作成(ITEM_TYPE_CD) ADOX.ColumnClass columnTestCd = new ADOX.ColumnClass(); columnTestCd.ParentCatalog = catalog; //列名を設定 columnTestCd.Name = "TEST_CD"; //桁数を設定 columnTestCd.DefinedSize = 8; //列に設定した内容を登録 table.Columns.Append(columnTestCd, ADOX.DataTypeEnum.adVarWChar, columnTestCd.DefinedSize);
//プライマリーキーの設定 table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "TEST_CD", "", "");
//カタログにテーブル定義を設定 catalog.Tables.Append(table);
/*ブレークポイントを張って一度ストップし、「デバック開始」実行で、全てのレコードが出力される*/ /*↓ここから↓*/ String sql = @" SELECT A.TEST_CD FROM TEST_TBL A";
//Oracleパラメータ用のリストを宣言 List<OracleParameter> opArray = new List<OracleParameter>(); //SQLの実行、データセットへ格納 DataSet Ds = doSelect(cmd, sql, opArray);
//コネクションを開く mdbConnect.Open();
//Oracleより取得したDataSet分ループして、MDBに書き込みを行う for (int i = 0; i < Ds.Tables[0].Rows.Count; i++) {
//SQLパラメータに、TEST_CDを設定 mdbCommand.Parameters.Add(":pTEST_CD", OleDbType.VarWChar, 8); mdbCommand.Parameters[":pTEST_CD"].Value = Ds.Tables[0].Rows[i]["TEST_CD"];
//SQLの実行 mdbCommand.ExecuteNonQuery(); /*↑ここまで↑*/ } /*ここでブレークポイントを張っても1レコード目は書き込みされない*/ //コネクションを閉じる mdbConnect.Close();
} catch (Exception ex) {
} }
大変申し訳ないのですが、どうぞ、宜しくお願い致します。
|