/* call-seq: * server_version() -> string * * 연결된 서버의 버전을 문자열로 반환합니다. */ VALUE cubrid_conn_server_version(VALUE self) { char ver_str[MAX_STR_LEN]; int res; Connection *con; GET_CONN_STRUCT(self, con); CHECK_CONNECTION(con, Qnil); res = cci_get_db_version(con->handle, ver_str, MAX_STR_LEN); if (res < 0) { cubrid_handle_error(res, NULL); return Qnil; } return rb_str_new2(ver_str); }
int DbConnect(){ int nDB; nDB = cci_connect(DB_SERVER, DB_PORT, DB_NAME, DB_USER_ID, DB_USER_PW); if(nDB >= 0){ output("DB Connected\n"); char buf[128]; cci_get_db_version(nDB,buf,128); output("DB Version : Cubrid %s\n", buf); return nDB; } else{ output("DB Connect failed (%d)\n", nDB); char msg[256]; cci_get_error_msg(nDB,NULL,msg,256); output(msg); return -1; } }
STDMETHODIMP CCUBRIDDataSource::Initialize(void) { ATLTRACE2(atlTraceDBProvider, 2, "CCUBRIDDataSource::Initialize\n"); // 현재 오류객체를 제거한다. ClearError(); // 연결정보들(ID, 암호등)이 올바른지 확인한다. char dbmsver[16]; { int hConn = 0; //T_CCI_ERROR error; HRESULT hr = Util::Connect(this, &hConn); if(FAILED(hr)) return hr; char buf[16]; T_CCI_ERROR error; int rc = cci_get_db_version(hConn, buf, sizeof(buf)); if(rc<0) { ATLASSERT(rc!=CCI_ER_CON_HANDLE); // rc==CCI_ER_CONNECT -> 주소나 포트가 틀림 // rc==CAS_ER_DBMS -> DB 이름이나 ID, 암호가 틀림 ATLTRACE2(atlTraceDBProvider, 0, "CCUBRIDDataSource::Initialize : cci_get_db_version failed with rc=%d\n", rc); Util::Disconnect(&hConn); CComVariant var; var = DBPROPVAL_CS_COMMUNICATIONFAILURE; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); return RaiseError(DB_SEC_E_AUTH_FAILED, 0, __uuidof(IDBInitialize), (LPWSTR)0, L"42000"); } //최대 스트링 갯수를 나타내는 데이터베이스 파라메터를 가져온다. rc = cci_get_db_parameter(hConn, CCI_PARAM_MAX_STRING_LENGTH, &PARAM_MAX_STRING_LENGTH, &error); if (rc < 0) { Util::Disconnect(&hConn); CComVariant var; var = DBPROPVAL_CS_COMMUNICATIONFAILURE; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); return RaiseError(E_FAIL, 0, __uuidof(IDBInitialize), error.err_msg); } Util::Disconnect(&hConn); int a=0, b=0, c=0; sscanf(buf, "%2d.%2d.%2d", &a, &b, &c); sprintf(dbmsver, "%02d.%02d.%04d", a, b, c); } // ATL의 초기화 루틴을 호출 { HRESULT hr = IDBInitializeImpl<CCUBRIDDataSource>::Initialize(); if(FAILED(hr)) return hr; } // set properties { CComVariant var; // 읽기 전용 속성이므로 IDBProperties::SetProperties를 이용할 수 없다. // 대신 내부적으로 IDBProperties에 이용된 CUtlProps::SetPropValue를 사용한다. // 외부적으론 변경할 수 없지만, 내부적으로 변경할 수 있도록 // DBPROPFLAGS_CHANGE flag를 추가한다. var = dbmsver; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_DBMSVER, &var); VariantClear(&var); VariantInit(&var); var = "2.0.01.004"; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_PROVIDERVER, &var); GetPropValue(&DBPROPSET_DBINIT, DBPROP_INIT_LOCATION, &var); SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_DATASOURCENAME, &var); var = DBPROPVAL_CS_INITIALIZED; SetPropValue(&DBPROPSET_DATASOURCEINFO, DBPROP_CONNECTIONSTATUS, &var); } return S_OK; }