VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

连接数据库

获取ODBC连接

获取连接有两种方法。

  • 通过调用SQLConnect()函数连接到数据库:


SQLHENV    V_OD_Env; // 环境句柄 
SQLHDBC    V_OD_hdbc; // 连接句柄 
SQLRETURN retcode; // 返回值
SQLINTEGER  V_OD_erg; //调用 接口返回值

 /* 1.分配环境句柄 */
V_OD_erg = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); 
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))    
{
printf("Error AllocHandle\n");     
exit(0);    
}

 /* 2.设置ODBC环境属性(版本信息)*/
SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

/* 3.分配连接句柄 */
V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc);   
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))   
{           
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);     
exit(0);    
}

 /* 4.设置连接属性 */
SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT,(SQLPOINTER)SQL_AUTOCOMMIT_ON, 0);

/* 5.连接数据源,这里的“userName”与“password”分别表示连接数据库的用户名和用户密码,请根据实际情况修改。
如果odbc.ini文件中已经配置了用户名密码,那么这里可以留空("")。 但是不建议这么做,因为一旦odbc.ini权限管理不善,将导致数据库用户密码泄露. */
V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "Test", SQL_NTS,  (SQLCHAR*) "vastbase", SQL_NTS, (SQLCHAR*) "Aa@123456", SQL_NTS); 
 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))   
{   
printf("Error SQLConnect %d\n",V_OD_erg);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); 
exit(0);    
}
printf("Connected !\n");
  • 通过调用SQLDriverConnect()函数连接到数据库:


SQLHENV    V_OD_Env; // 环境句柄 
SQLHDBC    V_OD_hdbc; // 连接句柄 
SQLRETURN retcode; // 返回值
SQLINTEGER  V_OD_erg; //调用 接口返回值

 /* 1.分配环境句柄 */
V_OD_erg = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); 
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))    
{
printf("Error AllocHandle\n");     
exit(0);    
}

 /* 2.设置ODBC环境属性(版本信息)*/
SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);

/* 3.分配连接句柄 */
V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc);   
if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))   
{           
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);     
exit(0);    
}

 /* 4.设置连接属性 */
SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT, 
(SQLPOINTER) SQL_AUTOCOMMIT_ON, 0);

/* 5. 连接数据源 */
V_OD_erg = SQLDriverConnect(V_OD_hdbc, NULL, (SQLCHAR*)"Driver=GaussMPP;Servername=127.0.0.1;Port=5432;Database=postgres;UserName=vastbase;Password=Aa@123456", SQL_NTS, str, sizeof(str), &strl,SQL_DRIVER_COMPLETE); 
 if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO))   
{   
printf("Error SQLConnect %d\n",V_OD_erg);
SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); 
exit(0);    
}
printf("Connected !\n");

关闭ODBC连接

关闭连接时调用SQLDisconnect()函数关闭数据库连接:

rc = SQLDisconnect(V_OD_hdbc);
if (!SQL_SUCCEEDED(rc))
{
	printf("SQLDisconnect failed");
	fflush(stdout);
	exit(1);
}

rc = SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc);
if (!SQL_SUCCEEDED(rc))
{
	printf("SQLFreeHandle failed");
	fflush(stdout);
	exit(1);
}

V_OD_hdbc = NULL;
rc = SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env);
if (!SQL_SUCCEEDED(rc))
{
	printf("SQLFreeHandle failed");
	fflush(stdout);
	exit(1);
}

V_OD_Env= NULL;