コード例 #1
0
ファイル: conn.c プロジェクト: hellohuizhang/cubrid-ruby
/* 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);
}
コード例 #2
0
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;
	}
}
コード例 #3
0
ファイル: DataSource.cpp プロジェクト: dong1/testsize
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;
}