
# 连接数据库涉及的API
在测试连接数据库成功后，ODBC API提供了一组函数来连接数据库，如[表1]所示。
 表1相关API说明 
| **功能** | **API**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|
| 申请句柄资源 | [SQLAllocHandle](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0100.html#ZH-CN_TOPIC_0000002200189570)：申请句柄资源，可替代如下函数： - [SQLAllocEnv](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0098.html#ZH-CN_TOPIC_0000002235269813)：申请环境句柄  - [SQLAllocConnect](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0099.html#ZH-CN_TOPIC_0000002200349358)：申请连接句柄  - [SQLAllocStmt](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0101.html#ZH-CN_TOPIC_0000002235389629)：申请语句句柄   |
| 设置环境属性 | [SQLSetEnvAttr](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0118.html#ZH-CN_TOPIC_0000002235269833)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| 设置连接属性 | [SQLSetConnectAttr](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0117.html#ZH-CN_TOPIC_0000002235389645)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| 连接数据库  | [SQLConnect](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-0105.html#ZH-CN_TOPIC_0000002235389633)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
以开发源程序DBtest.c为例（完整示例请参考[获取和处理数据库中的数据](https://support.huaweicloud.com/distributed-devg-v3-gaussdb/gaussdb-12-1718.html#ZH-CN_TOPIC_0000002235269809)）：
```
// DBtest.c (compile with: libodbc.so)
// 程序头文件和全局变量请参考完整示例
// 申请环境句柄。       
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);        
}
// 设置版本信息（环境属性）。         
SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
// 申请连接句柄  。      
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);       
}
// 获取用户名和用户密码。
char *userName;
userName = getenv("EXAMPLE_USERNAME_ENV");
char *password;
password = getenv("EXAMPLE_PASSWORD_ENV");
// 设置连接属性。
SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT,(SQLPOINTER *)SQL_AUTOCOMMIT_ON, 0);
// 连接数据库，这里的userName与password分别表示连接数据库的用户名和用户密码。
// 如果odbc.ini文件中已经配置了用户名密码，那么这里可以留空（""）；但是不建议这么做，因为一旦odbc.ini权限管理不善，将导致数据库用户密码泄露。    
V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "gaussdb", SQL_NTS,  
   (SQLCHAR*) userName, SQL_NTS,  (SQLCHAR*) password, 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");
```
