첫번째 테이블에 10만건
밑에 테이블에 500만건 데이타를 넣으려고 합니다.
위에 테이블의 건수가 10000건이 되었을때(밑에 테이블은 50만건) 한번 commit하고 다시
트랜잭션 생성해서 처리를 반복합니다.
밑에 테이블의 건수가 50만건을 조금 넘으면
cmd.ExecuteNonQuery(); 이 부분에서 인수가 무효라고 에러가 나고 있습니다.
ㅜㅜ 여기 첨부파일 못올리나요...
<에러메세지... >
system.data.oledb.oledbexception; 인수가 무효입니다.
system.data.oledcommand.executecommandtextforsingleresult(tagDBPARAMS db Params, object& executeResult)
system.data.oledcommand.executecommandtext(object& executeResult)
디스크 공간도 충분한데요..
어디가 문제인지 모르겠네요.. 도움 부탁드려요.
string sReceiptNo = " ", sItem = "", sInsertItem = "", sEdaban = "";
int sDataCount = Convert.ToInt32(txtDpKanri.Text), sEntryNo = 0, sKouban=0;
int sKanriDataCnt = Convert.ToInt32(txtKanri.Text), sCount = 0, sTotal = 0;
RegisterReceiptInfo(sGyomu, sGyomuAtt);
getKanrino(sReceiptTbl, sReceiptType);
using (OleDbConnection con = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = con;
con.Open();
OleDbTransaction txn = con.BeginTransaction();
cmd.Transaction = txn;
try
{
for (int i = 0; i < sDataCount; i++)
{
sReceiptNo = GetReceiptNo(sReceiptType, sReceiptTbl, sKanriNo++);
cmd.CommandText = "INSERT INTO " + sReceiptTbl + " (kanri_no, receipt_no, entry_dtm, receipt_type_cd, group_cd, koji_type_cd) "
+ "VALUES(" + sKanriNo + ",'" + sReceiptNo + "',#" + DateTime.Now.ToString() + "# , " + sReceiptType + ", '"
+ sGroupData[sGroupCount] + "', " + sKoujiKubunnData[sKoujiKubunnCount] + ")";
cmd.ExecuteNonQuery();
if (sGroupCount >= sGroupData.Count - 1)
sGroupCount = 0;
else
++sGroupCount;
if (sKoujiKubunnCount >= sKoujiKubunnData.Count - 1)
sKoujiKubunnCount = 0;
else
++sKoujiKubunnCount;
for (int j = 0; j < sKanriDataCnt; j++)
{
sItem = sStockItem[sItemCnt].ToString();
int pos = sItem.IndexOf("@");
sInsertItem = sItem.Substring(0, pos);
sEdaban = sItem.Substring(pos + 1, sItem.Length - (pos + 1));
cmd.CommandText = "INSERT INTO " + sTbl + " (kanri_no, kouban, item_cd, price_edaban, suryou, ins_dtm, entry_no) "
+ "values(" + sKanriNo + ", " + ++sKouban + ", '" + sInsertItem + "', " + sEdaban + ", 1, #" + DateTime.Now.ToString() + "#, " + ++sEntryNo + ")";
cmd.ExecuteNonQuery();
if (sItemCnt >= sStockItem.Count - 1)
sItemCnt = 0;
else
++sItemCnt;
}
sKouban = 0;
sEntryNo = 0;
++sTotal;
if (sCount == 10000 || sTotal == sDataCount)
{
txn.Commit();
sCount = 0;
if (sTotal < sDataCount)
{
txn = con.BeginTransaction();
cmd.Transaction = txn;
}
}
else
++sCount;
}
}
catch (Exception ex)
{
try
{
txn.Rollback();
}
catch
{
// Do nothing here; transaction is not active.
}
}
}
}
sKanriNo = 0;
sGroupCount = 0;
sKoujiKubunnCount = 0;
sGroupData.Clear();
sKoujiKubunnData.Clear();
|