ADO.NET "Invalid buffer position!" 오류

by 할리 posted Jul 17, 2014

* 질문 등록 시 다음의 내용을 꼭 기입하여 주세요.
OS
 Windows 2008 32bit
CUBRID Ver.
CUBRID 9.3 (9.3.0.0206)
CUBRID TOOL Ver.
[도움말]-[버전정보] 확인
응용 환경(API)
CUBRID ADO.NET Data Provider 9.3.0.0001, .NET2.0,  VS2008

* CUBRID 응용 오류, SQL 오류 또는 SQL 튜닝 관련된 문의는 반드시 다음의 내용을 추가해 주세요. 비밀글이나 비밀 댓글도 가능합니다.
* 저희가 상황을 이해하고, 재현이 가능해야 알 수 있는 문제들이 많습니다. 가능한 정보/정황들을 부탁합니다.
에러 내용 및 재현 방법 재현 가능한 Source와 SQL
관련 테이블(인덱스, 키정보 포함) 정보 CUBRID 홈 디렉토리 아래 log 디렉토리 압축


-------------- 아래에 질문 사항을 기입해 주세요. ------------------------------------------------------------------------

* Select 오류
ado.net을 통해 "select"실행할 경우 특정 상태의 테이블을 조회하면 마지막 행을 읽지 못하고 "Invalid buffer position!" 오류가 발생합니다.

해당 테이블에 행수가 변경되거나 컬럼이 수가 변경되거나 "where" 절, order by" 절이 생략되면 해당오류를 발생하지 않고 정상적으로

처리됩니다.

 

*Insert/Update 오류

ado.net을 통해 Connection 을 유지한 상태로 Insert를 실행하면 400~500회정도 실행한 후에

"전송 연결 현재 연결은 원격 호스트에 의해 강제로 끊겼습니다에서 데이터를 읽을 수 없습니다." 오류가 발생합니다.

 

첨부 파일을 열어보면 "test.sql" 파일에 "insert"용 테이블과 "select"용 테이블이 이 정의 되어 있으며

테스트 코드 "InsertTest()", "SelectTest()" 두 함수를 통해 확인 할 수 있습니다.

 

 

 

 

아래 내용은 CUBRID-CCI-Windows-x86-9.3.0.0206 드라이버에서 발생하는 문제입니다.

 

T_CCI_ERROR cci_error;

int result = cci_cursor (_cciRequestId, 1, CCI_CURSOR_CURRENT, &cci_error);
 if (result == CCI_ER_NO_MORE_DATA) return false;
 if (result == -5) return false;//CCI_ER_NO_MORE_DATA = -20005, -5는 뭐지??? bug???

 

추가 레코드가 없는경우 "cci_error" 객체에는 아무런 정보가 포함되어 있지 않으며 "result" 값이 -5가 나옵니다.

헤더파일에는 아래와 같이 정의 되어 있습니다.

CCI_ER_NO_MORE_DATA = -20005

 

컴파일을 잘못한건지 드라이버에 문제가 있는건지 확인 부탁드립니다.