SQLDataSourceToDriver 函数
SQLDataSourceToDriver 支持 ODBC 驱动程序的转换。 启用 ODBC 的应用程序不调用此函数;应用程序通过 SQLSetConnectAttr 请求转换。 与 SQLSetConnectAttr 中指定的 ConnectionHandle 关联的驱动程序调用指定的 DLL,以执行从数据源流向驱动程序的所有数据的转换。 可以在 ODBC 初始化文件中指定默认转换 DLL。
语法
BOOL SQLDataSourceToDriver(
UDWORD fOption,
SWORD fSqlType,
PTR rgbValueIn,
SDWORD cbValueIn,
PTR rgbValueOut,
SDWORD cbValueOutMax,
SDWORD * pcbValueOut,
UCHAR * szErrorMsg,
SWORD cbErrorMsgMax,
SWORD * pcbErrorMsg);
参数
fOption
[输入]选项值。
fSqlType
[输入]SQL 数据类型。 此参数告知驱动程序如何将 rgbValueIn 转换为应用程序可接受的形式。 有关有效 SQL 数据类型的列表,请参阅附录 D: 数据类型中的 SQL 数据类型部分。
rgbValueIn
[输入]要转换的值。
cbValueIn
[输入] rgbValueIn 的长度。
rgbValueOut
[输出]转换的结果。
注意
转换 DLL 不会以 null 结尾此值。
cbValueOutMax
[输入] rgbValueOut 的长度。
rvalueOut
[输出] (排除可在 rgbValueOut 中返回的 null 终止字节) 的总字节数。
对于字符或二进制数据,如果此值大于或等于 cbValueOutMax, 则 rgbValueOut 中的数据将被截断为 cbValueOutMax 字节。
对于所有其他数据类型, 将忽略 cbValueOutMax 的值,转换 DLL 假定 rgbValueOut 的大小是使用 fSqlType 指定的 SQL 数据类型的默认 C 数据类型的大小。
该参数可以为 null 指针。
szErrorMsg
[输出]指向错误消息存储的指针。 除非转换失败,否则这是空字符串。
cbErrorMsgMax
[输入] szErrorMsg 的长度。
oemErrorMsg
[输出]指向总字节数的指针, (不包括可在 szErrorMsg 中返回的 null 终止字节) 。 如果此值大于或等于 cbErrorMsg, 则 szErrorMsg 中的数据将被截断为 cbErrorMsgMax 减去 null 终止字符。 该参数可以为 null 指针。
返回
如果转换成功,则为 TRUE;如果转换失败,则为 FALSE。
注释
驱动程序调用 SQLDataSourceToDriver 来转换所有数据 (结果集数据、表名称、行计数、错误消息等,) 从数据源传递到驱动程序。 转换 DLL 可能不会转换某些数据,具体取决于数据的类型和转换 DLL 的用途;例如,将字符数据从一个代码页转换为另一个代码页的 DLL 会忽略所有数值和二进制数据。
fOption 的值设置为通过使用 SQL_ATTR_TRANSLATE_OPTION 属性调用 SQLSetConnectAttr 指定的 vParam 值。 它是一个 32 位值,对于给定的翻译 DLL 具有特定的含义。 例如,它可以指定特定的字符集转换。
如果为 rgbValueIn 和 rgbValueOut 指定了相同的缓冲区,则将就地执行缓冲区中的数据转换。
尽管 cbValueIn、 cbValueOutMax 和 cbValueOut 属于 SDWORD 类型, 但 SQLDataSourceToDriver 不一定支持大型指针。
如果 SQLDataSourceToDriver 返回 FALSE,则可能是在转换期间发生数据截断。 如果 (输出 缓冲区) 中可返回的字节数大于 cbValueOutMax (输出缓冲区) 长度,则会发生截断。 驱动程序必须确定截断是否可接受。 如果未发生截断,则 SQLDataSourceToDriver 由于另一个错误而返回 FALSE。 在任一情况下, szErrorMsg 中都返回特定的错误消息。
有关转换数据的详细信息,请参阅 翻译 DLL。
相关函数
有关以下方面的信息 | 请参阅 |
---|---|
转换发送到数据源的数据 | SQLDriverToDataSource |
返回连接属性的设置 | SQLGetConnectAttr |
设置连接属性 | SQLSetConnectAttr |