将数据从 C 转换为 SQL 数据类型

当应用程序调用 SQLExecuteSQLExecDirect 时,驱动程序将从应用程序中的存储位置检索与 SQLBindParameter 绑定的任何参数的数据。 当应用程序调用 SQLSetPos 时,驱动程序将从与 SQLBindCol 绑定的列检索更新或添加操作的数据。 对于执行数据参数,应用程序使用 SQLPutData 发送参数数据。 如有必要,驱动程序会将 SQLBindParameter 中 ValueType 参数指定的数据类型中的数据转换为由 SQLBindParameter 中的 ParameterType 参数指定的数据类型,然后将数据发送到数据源。

下表显示了从 ODBC C 数据类型到 ODBC SQL 数据类型支持的转换。 填充圆表示 SQL 数据类型的默认转换(当 ValueType 的值或SQL_DESC_CONCI标准版_TYPE描述符字段SQL_C_DEFAULT时,将从中转换数据的 C 数据类型)。 空心圆表示支持的转换。

转换后的数据的格式不受 Windows 国家或地区设置的影响。

Supported conversions: ODBC C to SQL data types

以下部分中的表介绍了驱动程序或数据源如何转换发送到数据源的数据;驱动程序需要支持从所有 ODBC C 数据类型到它们支持的 ODBC SQL 数据类型的转换。 对于给定的 ODBC C 数据类型,表的第一列列出了 SQLBindParameter 中 ParameterType 参数的法律输入值 第二列列出了驱动程序执行以确定其是否可以转换数据的测试的结果。 第三列列出 SQLExecDirect、SQLExecuteSQLBulkOperationsSQLSetPosSQLPutData 为每个结果返回的 SQLSTATE。 仅当返回SQL_SUCCESS时,数据才会发送到数据源。

如果 SQLBindParameter 中的 ParameterType 参数包含给定 C 数据类型表中未显示的 ODBC SQL 数据类型的标识符,则 SQLBindParameter 返回 SQLSTATE 07006(受限数据类型属性冲突)。 如果 ParameterType 参数包含特定于驱动程序的标识符,并且驱动程序不支持从特定 ODBC C 数据类型转换为该驱动程序特定的 SQL 数据类型,则 SQLBindParameter 返回 SQLSTATE HYC00(未实现可选功能)。

如果 SQLBindParameter 中指定的 ParameterValuePtrStrLen_or_IndPtr 参数都是空指针,则该函数返回 SQLSTATE HY009 (null 指针使用无效)。 尽管表中未显示该参数,但应用程序将 SQLBindParameter StrLen_or_IndPtr 参数指向的长度/指示器缓冲区的值或 SQLPutData StrLen_or_IndPtr 参数的值设置为SQL_NULL_DATA指定 NULL SQL 数据值。 (The StrLen_or_IndPtr参数对应于 APD 的SQL_DESC_OCTET_LENGTH_PTR字段。应用程序将这些值设置为SQL_NTS,以指定 SQLBindParameter 中的 *ParameterValuePtr 或 SQLPutData 中的 *DataPtr 中的值(由 APD 的SQL_DESC_DATA_PTR字段指向)是一个以 null 结尾的字符串。

表中使用了以下术语:

  • 数据的 字节长度 - 可用于发送到数据源的 SQL 数据的字节数,无论数据在发送到数据源之前是否将被截断。 对于字符串数据,这不包括 null 终止字符的空间。

  • 列字节长度 - 在数据源中存储数据所需的字节数。

  • 字符字节长度 - 以字符形式显示数据所需的最大字节数。 这在显示大小中为每个 SQL 数据类型定义,但字符字节长度为字节,而显示大小以字符为单位。

  • 数字 数 - 用于表示数字的字符数,包括减号、小数点和指数(如果需要)。

  • 单词
    斜体 - SQL 语法的元素。 有关语法元素的语法,请参阅 附录 C:SQL 语法

本部分包含以下主题。