VastbaseG100

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

Menu

使用ODBC连接数据库

连接数据库

获取ODBC连接

获取连接有两种方法。

1、通过调用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");

2、通过调用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;

连接参数

连接参数

名称 缩写 类型 定义
Description string 数据源说明
Servicename string 数据源服务主机名或IP
Port int 数据库端口
Username string 数据库用户
Password string 数据库用户密码
UseDeclareFetch B6 bool 是否使用Declare和Fetch
Fetch A7 int 批量读取的最大行数
Socket A8 int Socket buffer size
ReadOnly A0 bool 数据库是否只读
MaxVarcharSize B0 int Varchar的最大长度
KeepaliveTime D1 int TCP KEEPALIVE设置:空闲时间
KeepaliveInterval D2 int TCP KEEPALIVE设置:间隔

连接参数可以在连接串中指定:

ret = SQLDriverConnect(conn, NULL, (SQLCHAR*)"Driver=PostgreSQL;Servername=192.168.114.28;Port=5411;Database=atlasdb;UserName=atlasdb;Password=atlasdb;ReadOnly=Yes;Fetch=200", SQL_NTS, str, sizeof(str), &strl, SQL_DRIVER_COMPLETE);