ODBC 이용하여 데이터 입력작업중입니다. 다은과 같은 오류가 발생합니다.
왜 그런건지 알수 있는지요 ?
CA018
[CUBRID][CUBRID ODBC Driver]儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆儆T?w?w麥*
512개 문자열 받아 짐.
CA018 - 원래 오류 문장이 뭔지요 ?
다음 소스에서 확인 부탁 드립니다.
SQLTCHAR *Statement = _T("insert into tablename(번호1,번호2,문자열) values (?,?,?)");
SQLPrepare(m_hstmt, Statement, SQL_NTS);
SQLUINTEGER CenterID = 10;
SQLUINTEGER FolderID = 11;
char FileName[1024] = {"문자열테스트"};
SQLINTEGER NumberInd = 0;
SQLINTEGER StringInd = SQL_NTS;
retcode = ::SQLBindParameter(m_hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &CenterID, 0, &NumberInd);
if ( !SQL_CK_SUCCEEDED(retcode,SQL_HANDLE_STMT,m_hstmt) ) return 0;
retcode = ::SQLBindParameter(m_hstmt, 2, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &FolderID, 0, &NumberInd);
if ( !SQL_CK_SUCCEEDED(retcode,SQL_HANDLE_STMT,m_hstmt) ) return 0;
retcode = ::SQLBindParameter(m_hstmt, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, FileName, 1024, & StringInd);
if ( !SQL_CK_SUCCEEDED(retcode,SQL_HANDLE_STMT,m_hstmt) ) return 0;
retcode = ::SQLExecute(m_hstmt);
if ( !SQL_CK_SUCCEEDED(retcode,SQL_HANDLE_STMT,m_hstmt) ) return 0;
retcode = ::SQLExecute(m_hstmt);
if ( !SQL_CK_SUCCEEDED(retcode,SQL_HANDLE_STMT,m_hstmt) ) return 0; <- 여기서 에러 남..
SQLPrepare 사용 하기 위해서는 AutoCommit을 끝다음에 사용해야 하는 군요.
다음과 같이 자동 커밋을 꺼둘 수 있습니다.
SQLRETURN retcode = SQLSetConnectAttr(m_hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, 0);
if ( SQL_SUCCEEDED(retcode) ) // 오류 처리
원인은 자동 커밋 상태에서는
SQLExecute 시에 SQLPrepare로 설정한 내용이 전부 지워 지게 된다고 하내요 .
cci 셈플 코드 확인하니깐 Commit 후에는 다시 SQLPrepare 를 다시 설정해주어야 하는 것을 보고 알았습니다.
이것이 다른 DB와 같은지는 잘 모르겠지만 현재 큐브리드에서는 커밋이후에는 Prepare 내용이 지워지는것으로 되어 있습니다.
이상 자답이었습니다.