
# 具体步骤
1. 配置连接 
   1. 配置连接超时参数。 通过SQLSetConnectAttr函数设置连接超时时间：SQL_LOGIN_TIMEOUT参数对应于libpq参数connect_timeout，用于控制客户端连接服务端超时时间，单位为秒，默认值为0，表示该参数不生效。该参数推荐配置，客户可根据实际网络情况配置。
      ```
      SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0);
      ```
      
   
   2. 关闭自动提交选项，使用事务提交或回滚。 通过SQLSetConnectAttr函数将自动提交属性设置为SQL_AUTOCOMMIT_OFF，关闭自动提交，以便使用事务进行提交或回滚。
      ```
      SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF, 0);
      ```
      
   
   3. 连接数据库。 通过SQLConnect函数连接数据库，具体函数原型如下：
      ```
      SQLRETURN  SQLConnect(SQLHDBC        ConnectionHandle,
                            SQLCHAR        *ServerName,
                            SQLSMALLINT    NameLength1,
                            SQLCHAR        *UserName,
                            SQLSMALLINT    NameLength2,
                            SQLCHAR        *Authentication,
                            SQLSMALLINT    NameLength3);
      ```
      指定数据源名ServerName为[前置准备](https://support.huaweicloud.com/bestpractice-gaussdb/gaussdb-22-0133.html#ZH-CN_TOPIC_0000002633580678)中的"gaussdb"时，ODBC会自动从配置文件odbc.ini中（Linux环境）或数据源管理器中（Windows环境）获取对应的连接参数。
      获取到数据源后，可以通过连接句柄hdbc访问到所有有关连接数据源的信息，包括程序运行状态、事务处理状态和错误信息等，使用对应的参数连接数据库。
      ```
      SQLConnect(hdbc, (SQLCHAR *)"gaussdb", SQL_NTS, (SQLCHAR *)"", 0, (SQLCHAR *)"", 0);
      ```
      
   
   
   
   
2. 配置批量绑定参数 
   1. 设置批量绑定参数。 设置批量绑定参数数组的总行数，其中batchCount变量为预期处理的批量插入总行数。
      ```
      SQLSetStmtAttr(hstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)batchCount, sizeof(batchCount));
      ```
      设置已处理的行数，其中processRows变量为已处理的批量插入行数。
      ```
      SQLSetStmtAttr(hstmt, SQL_ATTR_PARAMS_PROCESSED_PTR, (SQLPOINTER)&processRows, sizeof(processRows));
      ```
      
   
   2. 预编译语句及批量绑定。
      使用SQLPrepare函数预编译SQL语句，sql变量包含SQL语句字符串，SQL_NTS表示字符串以空字符结尾。同时使用SQLBindParameter函数绑定参数到预编译的SQL语句，ids和cols对应id和col两列的两个数组，其中id为INT类型，col为VARCHAR类型。
      ```
      SQLPrepare(hstmt, (SQLCHAR *)sql, SQL_NTS);
      SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(ids[0]), 0, &(ids[0]), 0, bufLenIds);
      SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 50, 50, cols, 50, bufLenCols);
      ```
      
   
   
   
   
3. 执行批量插入操作 
   1. 执行批量插入操作。 使用SQLExecute函数执行预编译的SQL语句，进行批量插入操作，通过返回值retcode判断操作是否成功。
      ```
      retcode = SQLExecute(hstmt);
      ```
      
   
   2. 手动提交或回滚事务。 retcode为SQL_SUCCESS或SQL_SUCCESS_WITH_INFO时，插入操作成功，调用SQLEndTran函数提交事务；当retcode为其他值时，插入操作失败，调用SQLEndTran函数回滚事务。
      ```
      SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT); // 提交事务
      SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_ROLLBACK); // 回滚事务
      ```
      
   
   3. 获取批量处理的行数。 使用SQLRowCount函数获取实际插入的行数，并存储在rowsCount变量中。
      ```
      SQLRowCount(hstmt, &rowsCount);
      ```
      
   
   
   
   
 
