2009/12/02

Firebird C API 데이터베이스 연결하기

char *szDBName = "e:\test.fdb";

char szSQL[2048] = {0,};
isc_db_handle db = NULL; // database handle
isc_tr_handle trans = NULL; // transaction handle
ISC_STATUS_ARRAY status; // status vector
long sqlcode; // SQLCODE
char *dpb_buffer = 0; // Database Parameter Buffer
short dpb_length = 0;

// Prepare parameter buffer
dpb_buffer = (char *)malloc(1);
*dpb_buffer = isc_dpb_version1;
dpb_length = 1;

// Set parameter User Name and Password
isc_expand_dpb( &dpb_buffer, &dpb_length
, isc_dpb_user_name, "SYSDBA"
, isc_dpb_password, "masterkey"
);

// Connect database
isc_attach_database( status, (int)strlen( szDBName ), szDBName, &db, dpb_length, dpb_buffer );

sqlcode = isc_sqlcode( status );
if ( status[0] == 1 && status[1] )
{
// Error occured
TRACE( "Fail to connect Database : %d\n", sqlcode );
return;
}

// Disconnect database
isc_detach_database( status, &db );

// Release parameter buffer
isc_free( dpb_buffer );


+ 2009/12/06
위의 코드는 메모리 1byte 의 메모리 누수가 생긴다. 누수가 발생하는 부분은 12번째 줄의 parameter buffer 에 버퍼 버전을 할당하는 부분으로 이부분을 주석처리하면 메모리 누수가 발생하지 않고 동작을 하게 된다. 버전을 명시하지 않아도 문제가 되는지 그리고 버전을 명시하고서도 메모리 누수가 발생하지 않도록 하는 방법이 있는지는 확인을 해 보아야 겠다

Original Post : http://neodreamer-dev.tistory.com/342

No comments :

Post a Comment