
# ODBC接口参考
ODBC接口是一套提供给用户的API函数，本节将对部分常用接口做具体描述，若涉及其他接口可参考[msdn网址](https://msdn.microsoft.com/en-us/library/windows/desktop/ms714177(v=vs.85).aspx)中ODBC Programmer's Reference项的相关内容。
#### SQLAllocEnv
在ODBC 3.x版本中，ODBC 2.x的函数SQLAllocEnv已被SQLAllocHandle代替。有关详细信息请参阅[SQLAllocHandle]。
#### SQLAllocConnect
在ODBC 3.x版本中，ODBC 2.x的函数SQLAllocConnect已被SQLAllocHandle代替。有关详细信息请参阅[SQLAllocHandle]。
 #### SQLAllocHandle
**功能描述**
分配环境、连接、语句或描述符的句柄，它替代了ODBC 2.x函数SQLAllocEnv、SQLAllocConnect及SQLAllocStmt。
**原型**
```
SQLRETURN SQLAllocHandle(SQLSMALLINT   HandleType,    
                         SQLHANDLE     InputHandle,     
                         SQLHANDLE     *OutputHandlePtr);
```
**参数**
表1SQLAllocHandle参数 
| **关键字**         | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
|:---|:---|
| HandleType      | 由SQLAllocHandle分配的句柄类型。必须为下列值之一： - SQL_HANDLE_ENV（环境句柄）  - SQL_HANDLE_DBC（连接句柄）  - SQL_HANDLE_STMT（语句句柄）  - SQL_HANDLE_DESC（描述句柄）   申请句柄顺序为，先申请环境句柄，再申请连接句柄，最后申请语句句柄，后申请的句柄都要依赖它前面申请的句柄。 |
| InputHandle     | 将要分配的新句柄的类型。 - 如果HandleType为SQL_HANDLE_ENV，则这个值为SQL_NULL_HANDLE。  - 如果HandleType为SQL_HANDLE_DBC，则这一定是一个环境句柄。  - 如果HandleType为SQL_HANDLE_STMT或SQL_HANDLE_DESC，则它一定是一个连接句柄。                                                                                                                                                                                                              |
| OutputHandlePtr | **输出参数**：一个缓冲区的指针，此缓冲区以新分配的数据结构存放返回的句柄。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当分配的句柄并非环境句柄时，如果SQLAllocHandle返回的值为SQL_ERROR，则它会将OutputHandlePtr的值设置为SQL_NULL_HDBC、SQL_NULL_HSTMT或SQL_NULL_HDESC。之后，通过调用带有适当参数的[SQLGetDiagRec]，其中HandleType和Handle被设置为InputHandle的值，可得到相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLAllocStmt
在ODBC 3.x版本中，ODBC 2.x的函数SQLAllocStmt已被SQLAllocHandle代替。有关详细信息请参阅[SQLAllocHandle]。
#### SQLBindCol
**功能描述**
将应用程序数据缓冲区绑定到结果集的列中。
**原型**
```
SQLRETURN SQLBindCol(SQLHSTMT       StatementHandle,    
                     SQLUSMALLINT   ColumnNumber,     
                     SQLSMALLINT    TargetType,
                     SQLPOINTER     TargetValuePtr,
                     SQLLEN         BufferLength,
                     SQLLEN         *StrLen_or_IndPtr);
```
**参数**
表2SQLBindCol参数 
| **关键字**          | **参数说明**                                                                            |
|:---|:---|
| StatementHandle  | 语句句柄。                                                                               |
| ColumnNumber     | 要绑定结果集的列号。起始列号为0，以递增的顺序计算列号，第0列是书签列。若未设置书签，则起始列号为1。                                 |
| TargetType       | 缓冲区中C数据类型的标识符。                                                                      |
| TargetValuePtr   | **输出参数**：指向与列绑定的数据缓冲区的指针。SQLFetch函数返回这个缓冲区中的数据。如果此参数为一个空指针，则StrLen_or_IndPtr是一个有效值。 |
| BufferLength     | TargetValuePtr指向缓冲区的长度，以字节为单位。                                                      |
| StrLen_or_IndPtr | **输出参数**：缓冲区的长度或指示器指针。若为空值，则未使用任何长度或指示器值。                                           |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意**
当SQLBindCol返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLBindParameter
**功能描述**
将一条SQL语句中的一个参数标志和一个缓冲区绑定起来。
**原型**
```
SQLRETURN SQLBindParameter(SQLHSTMT       StatementHandle,    
                           SQLUSMALLINT   ParameterNumber,     
                           SQLSMALLINT    InputOutputType,
                           SQLSMALLINT    ValueType,
                           SQLSMALLINT    ParameterType,
                           SQLULEN        ColumnSize,
                           SQLSMALLINT    DecimalDigits,
                           SQLPOINTER     ParameterValuePtr,
                           SQLLEN         BufferLength,
                           SQLLEN         *StrLen_or_IndPtr);
```
**参数**
表3SQLBindParameter 
| **关键词**           | **参数说明**                          |
|:---|:---|
| StatementHandle   | 语句句柄。                             |
| ParameterNumber   | 参数序号，起始为1，依次递增。                   |
| InputOutputType   | 输入输出参数类型。                         |
| ValueType         | 参数的C数据类型。                         |
| ParameterType     | 参数的SQL数据类型。                       |
| ColumnSize        | 列的大小或相应参数标记的表达式。                  |
| DecimalDigits     | 列的十进制数字或相应参数标记的表达式。               |
| ParameterValuePtr | 指向存储参数数据缓冲区的指针。                   |
| BufferLength      | ParameterValuePtr指向缓冲区的长度，以字节为单位。 |
| StrLen_or_IndPtr  | 缓冲区的长度或指示器指针。若为空值，则未使用任何长度或指示器值。  |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当SQLBindCol返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLColAttribute
**功能描述**
返回结果集中一列的描述符信息。
**原型**
```
SQLRETURN SQLColAttribute(SQLHSTMT        StatementHandle,    
                          SQLUSMALLINT    ColumnNumber,     
                          SQLUSMALLINT    FieldIdentifier,
                          SQLPOINTER      CharacterAttributePtr,
                          SQLSMALLINT     BufferLength,
                          SQLSMALLINT     *StringLengthPtr,
                          SQLPOINTER      NumericAttributePtr);
```
**参数**
表4SQLColAttribute参数 
| **关键字**               | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|
| StatementHandle       | 语句句柄。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ColumnNumber          | 要检索字段的列号，起始为1，依次递增。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| FieldIdentifier       | IRD中ColumnNumber行的字段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| CharacterAttributePtr | **输出参数**：一个缓冲区指针，返回FieldIdentifier字段值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| BufferLength          | - 如果FieldIdentifier是一个ODBC定义的字段，而且CharacterAttributePtr指向一个字符串或二进制缓冲区，则此参数为该缓冲区的长度。  - 如果FieldIdentifier是一个ODBC定义的字段，而且CharacterAttributePtr指向一个整数，则会忽略该字段。   |
| StringLengthPtr       | **输出参数**：缓冲区指针，存放\*CharacterAttributePtr中字符类型数据的字节总数，对于非字符类型，忽略BufferLength的值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| NumericAttributePtr   | **输出参数**：指向一个整型缓冲区的指针，返回IRD中ColumnNumber行FieldIdentifier字段的值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当SQLColAttribute返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLConnect
**功能描述**
在驱动程序和数据源之间建立连接。连接上数据源之后，可以通过连接句柄访问到所有有关连接数据源的信息，包括程序运行状态、事务处理状态和错误信息。
**原型**
```
SQLRETURN  SQLConnect(SQLHDBC        ConnectionHandle,
                      SQLCHAR        *ServerName,
                      SQLSMALLINT    NameLength1,
                      SQLCHAR        *UserName,
                      SQLSMALLINT    NameLength2,
                      SQLCHAR        *Authentication,
                      SQLSMALLINT    NameLength3);
```
**参数**
表5SQLConnect参数 
| **关键字**          | **参数说明**                 |
|:---|:---|
| ConnectionHandle | 连接句柄，通过SQLAllocHandle获得。 |
| ServerName       | 要连接数据源的名称。               |
| NameLength1      | ServerName的长度。           |
| UserName         | 数据源中数据库用户名。              |
| NameLength2      | UserName的长度。             |
| Authentication   | 数据源中数据库用户密码。             |
| NameLength3      | Authentication的长度。       |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
- SQL_STILL_EXECUTING：表示语句正在执行。
**注意事项**
当调用SQLConnect函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_DBC和ConnectionHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLDisconnect
**功能描述**
关闭一个与特定连接句柄相关的连接。
**原型**
```
SQLRETURN SQLDisconnect(SQLHDBC    ConnectionHandle);
```
**参数**
表6SQLDisconnect参数 
| **关键字**          | **参数说明**                 |
|:---|:---|
| ConnectionHandle | 连接句柄，通过SQLAllocHandle获得。 |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当调用SQLDisconnect函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_DBC和ConnectionHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLExecDirect
**功能描述**
使用参数的当前值，执行一条准备好的语句。对于一次只执行一条SQL语句，SQLExecDirect是最快的执行方式。
**原型**
```
SQLRETURN SQLExecDirect(SQLHSTMT         StatementHandle,
                        SQLCHAR         *StatementText,     
                        SQLINTEGER       TextLength);
```
**参数**
表7SQLExecDirect参数 
| **关键字**         | **参数说明**                 |
|:---|:---|
| StatementHandle | 语句句柄，通过SQLAllocHandle获得。 |
| StatementText   | 要执行的SQL语句。不支持一次执行多条语句。   |
| TextLength      | StatementText的长度。        |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_NEED_DATA：在执行SQL语句前没有提供足够的参数。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
- SQL_STILL_EXECUTING：表示语句正在执行。
- SQL_NO_DATA：表示SQL语句不返回结果集。
**注意事项**
当调用SQLExecDirect函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLExecute
**功能描述**
如果语句中存在参数标记的话，SQLExecute函数使用参数标记参数的当前值，执行一条准备好的SQL语句。
**原型**
```
SQLRETURN SQLExecute(SQLHSTMT    StatementHandle);
```
**参数**
表8SQLExecute参数 
| **关键字**         | **参数说明**    |
|:---|:---|
| StatementHandle | 要执行语句的语句句柄。 |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_NEED_DATA：表示在执行SQL语句前没有提供足够的参数。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_NO_DATA：表示SQL语句不返回结果集。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
- SQL_STILL_EXECUTING：表示语句正在执行。
**注意事项**
当SQLExecute函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，可通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLFetch
**功能描述**
从结果集中取下一个行集的数据，并返回所有被绑定列的数据。
**原型**
```
SQLRETURN SQLFetch(SQLHSTMT    StatementHandle);
```
**参数**
表9SQLFetch参数 
| **关键字**         | **参数说明**                 |
|:---|:---|
| StatementHandle | 语句句柄，通过SQLAllocHandle获得。 |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_NO_DATA：表示SQL语句不返回结果集。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
- SQL_STILL_EXECUTING：表示语句正在执行。
**注意事项**
当调用SQLFetch函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLFreeStmt
在ODBC 3.x版本中，ODBC 2.x的函数SQLFreeStmt已被SQLFreeHandle代替。有关详细信息请参阅[SQLFreeHandle]。
#### SQLFreeConnect
在ODBC 3.x版本中，ODBC 2.x的函数SQLFreeConnect已被SQLFreeHandle代替。有关详细信息请参阅[SQLFreeHandle]。
 #### SQLFreeHandle
**功能描述**
释放与指定环境、连接、语句或描述符相关联的资源，它替代了ODBC 2.x函数SQLFreeEnv、SQLFreeConnect及SQLFreeStmt。
**原型**
```
SQLRETURN SQLFreeHandle(SQLSMALLINT   HandleType,    
                        SQLHANDLE     Handle);
```
**参数**
表10SQLFreeHandle参数 
| **关键字**    | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
|:---|:---|
| HandleType | SQLFreeHandle要释放的句柄类型。必须为下列值之一： - SQL_HANDLE_ENV  - SQL_HANDLE_DBC  - SQL_HANDLE_STMT  - SQL_HANDLE_DESC   如果HandleType不是这些值之一，SQLFreeHandle返回SQL_INVALID_HANDLE。 |
| Handle     | 要释放的句柄。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
如果SQLFreeHandle返回SQL_ERROR，句柄仍然有效。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLFreeEnv
在ODBC 3.x版本中，ODBC 2.x的函数SQLFreeEnv已被SQLFreeHandle代替。有关详细信息请参阅[SQLFreeHandle]。
#### SQLPrepare
**功能描述**
准备一个将要进行的SQL语句。
**原型**
```
SQLRETURN SQLPrepare(SQLHSTMT      StatementHandle,    
                     SQLCHAR       *StatementText,     
                     SQLINTEGER    TextLength);
```
**参数**
表11SQLPrepare参数 
| **关键字**         | **参数说明**          |
|:---|:---|
| StatementHandle | 语句句柄。             |
| StatementText   | SQL文本串。           |
| TextLength      | StatementText的长度。 |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
- SQL_STILL_EXECUTING：表示语句正在执行。
**注意事项**
当SQLPrepare返回的值为SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数分别设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLGetData
**功能描述**
SQLGetData返回结果集中某一列的数据。可以多次调用它来部分地检索不定长度的数据。
**原型**
```
SQLRETURN SQLGetData(SQLHSTMT        StatementHandle,
                     SQLUSMALLINT    Col_or_Param_Num,
                     SQLSMALLINT     TargetType,
                     SQLPOINTER      TargetValuePtr,
                     SQLLEN          BufferLength,
                     SQLLEN          *StrLen_or_IndPtr);
```
**参数**
表12SQLGetData参数 
| **关键字**          | **参数说明**                                                                                                                             |
|:---|:---|
| StatementHandle  | 语句句柄，通过SQLAllocHandle获得。                                                                                                             |
| Col_or_Param_Num | 要返回数据的列号。结果集的列按增序从1开始编号。书签列的列号为0。                                                                                                    |
| TargetType       | TargetValuePtr缓冲中的C数据类型的类型标识符。若TargetType为SQL_ARD_TYPE，驱动使用ARD中SQL_DESC_CONCISE_TYPE字段的类型标识符。若为SQL_C_DEFAULT，驱动根据源的SQL数据类型选择缺省的数据类型。 |
| TargetValuePtr   | **输出参数**：指向返回数据所在缓冲区的指针。                                                                                                             |
| BufferLength     | TargetValuePtr所指向缓冲区的长度。                                                                                                             |
| StrLen_or_IndPtr | **输出参数**：指向缓冲区的指针，在此缓冲区中返回长度或标识符的值。                                                                                                  |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_NO_DATA：表示SQL语句不返回结果集。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
- SQL_STILL_EXECUTING：表示语句正在执行。
**注意事项**
当调用SQLFetch函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过调用[SQLGetDiagRec]函数，并将HandleType和Handle参数分别设置为SQL_HANDLE_STMT和StatementHandle，可得到一个相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
示例
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
 #### SQLGetDiagRec
**功能描述**
返回诊断记录的多个字段的当前值，其中诊断记录包含错误、警告及状态信息。
**原型**
```
SQLRETURN  SQLGetDiagRec(SQLSMALLINT    HandleType,
                         SQLHANDLE      Handle,
                         SQLSMALLINT    RecNumber,
                         SQLCHAR        *SQLState,
                         SQLINTEGER     *NativeErrorPtr,
                         SQLCHAR        *MessageText,
                         SQLSMALLINT    BufferLength,
                         SQLSMALLINT    *TextLengthPtr);
```
**参数**
表13SQLGetDiagRec参数 
| **关键字**        | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
|:---|:---|
| HandleType     | 句柄类型标识符，它说明诊断所要求的句柄类型。必须为下列值之一： - SQL_HANDLE_ENV  - SQL_HANDLE_DBC  - SQL_HANDLE_STMT  - SQL_HANDLE_DESC   |
| Handle         | 诊断数据结构的句柄，其类型由HandleType来指出。如果HandleType是SQL_HANDLE_ENV，Handle可以是共享的或非共享的环境句柄。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| RecNumber      | 指出应用从查找信息的状态记录。状态记录从1开始编号。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| SQLState       | **输出参数**：指向缓冲区的指针，该缓冲区存储着有关RecNumber的五字符的SQLSTATE码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| NativeErrorPtr | **输出参数**：指向缓冲区的指针，该缓冲区存储着本地的错误码。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| MessageText    | 指向缓冲区的指针，该缓冲区存储着诊断信息文本串。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| BufferLength   | MessageText的长度。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| TextLengthPtr  | **输出参数**：指向缓冲区的指针，返回MessageText中的字节总数。如果返回字节数大于BufferLength，则MessageText中的诊断信息文本被截断成BufferLength减去NULL结尾字符的长度。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
SQLGetDiagRec不发布自己的诊断记录。它用下列返回值来报告它自己的执行结果：
- SQL_SUCCESS：函数成功返回诊断信息。
- SQL_SUCCESS_WITH_INFO：\*MessageText太小以致不能容纳所请求的诊断信息。没有诊断记录生成。
- SQL_INVALID_HANDLE：由HandType和Handle所指出的句柄是不合法句柄。
- SQL_ERROR：RecNumber小于等于0或BufferLength小于0。
如果调用ODBC函数返回SQL_ERROR或SQL_SUCCESS_WITH_INFO，可调用SQLGetDiagRec返回诊断信息值SQLSTATE，SQLSTATE值的如下表。
表14SQLSTATE值 
| SQLSTATE | 错误         | 描述                                          |
|:---|:---|:---|
| HY000    | 一般错误       | 未定义特定的SQLSTATE所产生的一个错误。                     |
| HY001    | 内存分配错误     | 驱动程序不能分配所需要的内存来支持函数的执行或完成。                  |
| HY008    | 取消操作       | 调用SQLCancel取消执行语句后，依然在StatementHandle上调用函数。 |
| HY010    | 函数系列错误     | 在为执行中的所有数据参数或列发送数据前就调用了执行函数。                |
| HY013    | 内存管理错误     | 不能处理函数调用，可能由当前内存条件差引起。                      |
| HYT01    | 连接超时       | 数据源响应请求之前，连接超时。                             |
| IM001    | 驱动程序不支持此函数 | 调用了StatementHandle相关的驱动程序不支持的函数             |
   
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLSetConnectAttr
**功能描述**
设置控制连接各方面的属性。
**原型**
```
SQLRETURN SQLSetConnectAttr(SQLHDBC       ConnectionHandle
                            SQLINTEGER    Attribute,    
                            SQLPOINTER    ValuePtr,     
                            SQLINTEGER    StringLength);
```
**参数**
表15SQLSetConnectAttr参数 
| **关键字**          | **参数说明**                                                                                             |
|:---|:---|
| ConnectionHandle | 连接句柄。                                                                                                |
| Attribute        | 设置属性。                                                                                                |
| ValuePtr         | 指向对应Attribute的值。依赖于Attribute的值，ValuePtr是32位无符号整型值或指向以空结束的字符串。如果ValuePtr参数是驱动程序指定值，ValuePtr可能是有符号的整数。 |
| StringLength     | 如果ValuePtr指向字符串或二进制缓冲区，这个参数是\*ValuePtr长度。如果ValuePtr指向整型，忽略StringLength。                              |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当SQLSetConnectAttr的返回值为SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过借助SQL_HANDLE_DBC的HandleType和ConnectionHandle的Handle，调用[SQLGetDiagRec]可得到相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLSetEnvAttr
**功能描述**
设置控制环境各方面的属性。
**原型**
```
SQLRETURN SQLSetEnvAttr(SQLHENV       EnvironmentHandle
                        SQLINTEGER    Attribute,    
                        SQLPOINTER    ValuePtr,     
                        SQLINTEGER    StringLength);
```
**参数**
表16SQLSetEnvAttr参数 
| **关键字**           | **参数说明**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|
| EnvironmentHandle | 环境句柄。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| Attribute         | 需设置的环境属性，可为如下值： - SQL_ATTR_ODBC_VERSION：指定ODBC版本。  - SQL_CONNECTION_POOLING：连接池属性。  - SQL_OUTPUT_NTS：指明驱动器返回字符串的形式。   |
| ValuePtr          | 指向对应Attribute的值。依赖于Attribute的值，ValuePtr可能是32位整型值，或为以空结束的字符串。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| StringLength      | 如果ValuePtr指向字符串或二进制缓冲区，这个参数是\*ValuePtr长度，如果ValuePtr指向整型，忽略StringLength。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当SQLSetEnvAttr的返回值为SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过借助SQL_HANDLE_ENV的HandleType和EnvironmentHandle的Handle，调用[SQLGetDiagRec]可得到相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
#### SQLSetStmtAttr
**功能描述**
设置相关语句的属性。
**原型**
```
SQLRETURN SQLSetStmtAttr(SQLHSTMT      StatementHandle
                         SQLINTEGER    Attribute,    
                         SQLPOINTER    ValuePtr,     
                         SQLINTEGER    StringLength);
```
**参数**
表17SQLSetStmtAttr参数 
| **关键字**         | **参数说明**                                                                                                                  |
|:---|:---|
| StatementHandle | 语句句柄。                                                                                                                     |
| Attribute       | 需设置的属性。                                                                                                                   |
| ValuePtr        | 指向对应Attribute的值。依赖于Attribute的值，ValuePtr可能是32位无符号整型值，或指向以空结束的字符串，二进制缓冲区，或者驱动定义值。注意，如果ValuePtr参数是驱动程序指定值。ValuePtr可能是有符号的整数。 |
| StringLength    | 如果ValuePtr指向字符串或二进制缓冲区，这个参数是\*ValuePtr长度，如果ValuePtr指向整型，忽略StringLength。                                                   |
   
**返回值**
- SQL_SUCCESS：表示调用正确。
- SQL_SUCCESS_WITH_INFO：表示会有一些警告信息。
- SQL_ERROR：表示比较严重的错误，如：内存分配失败、建立连接失败等。
- SQL_INVALID_HANDLE：表示调用无效句柄。其他API的返回值同理。
**注意事项**
当SQLSetStmtAttr的返回值为SQL_ERROR或SQL_SUCCESS_WITH_INFO时，通过借助SQL_HANDLE_STMT的HandleType和StatementHandle的Handle，调用[SQLGetDiagRec]可得到相关的SQLSTATE值，通过SQLSTATE值可以查出调用此函数的具体信息。
**示例**
参见：[示例](https://support.huaweicloud.com/devg-dws/dws_04_0123.html)
