连接数据库
获取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;