将 DB-Library 大容量复制程序转换为 ODBC 非常简单,因为 SQL Server Native Client ODBC 驱动程序支持的大容量复制函数类似于 DB-Library 大容量复制函数,但有以下例外:
DB-Library 应用程序将指针作为大容量复制函数的第一个参数传递给 DBPROCESS 结构。 在 ODBC 应用程序中,DBPROCESS 指针将替换为 ODBC 连接句柄。
DB-Library 应用程序在连接之前调用 BCP_SETL ,以便在 DBPROCESS 上启用大容量复制作。 ODBC 应用程序改为在连接句柄上启用批量作之前调用 SQLSetConnectAttr :
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER);SQL Server Native Client ODBC 驱动程序不支持 DB-Library 消息和错误处理程序;必须调用 SQLGetDiagRec 来获取 ODBC 大容量复制函数引发的错误和消息。 大容量复制函数的 ODBC 版本返回 SUCCEED 或 FAILED 的标准大容量复制返回代码,而不是 ODBC 样式的返回代码,例如SQL_SUCCESS或SQL_ERROR。
为 DB-Library bcp_bindvarlen 参数指定的值的解释方式不同于 ODBC bcp_bindcbData 参数。
指示的条件 DB-Library varlen 值 ODBC cbData 值 提供的 Null 值 0 -1 (SQL_NULL_DATA) 提供的变量数据 -1 -10 (SQL_VARLEN_DATA) 零长度字符或二进制字符串 暂无 0 在 DB-Library 中, -1 的 varlen 值指示正在提供可变长度数据,在 ODBC cbData 中将解释为仅提供 NULL 值。 将 -1 的任何 DB-Library varlen 规范更改为 SQL_VARLEN_DATA,将 0 的任何 varlen 规范更改为 SQL_NULL_DATA。
DB-Library bcp_colfmtfile_collen 和 ODBC bcp_colfmtcbUserData 的问题与上面所述的 bcp_bindvarlen 和 cbData 参数相同。 将 -1 的任何 DB-Library file_collen 规范更改为SQL_VARLEN_DATA,将 0 的任何 file_collen 规范更改为 SQL_NULL_DATA。
ODBC bcp_control 函数的 iValue 参数是 void 指针。 在 DB-Library 中, iValue 是一个整数。 将 ODBC iValue 的值强制转换为 void *。
bcp_control选项 BCPMAXERRS 指定在大容量复制作失败之前可能有多个行可能出错。 BCPMAXERRS 的默认值为 0(第一个错误时失败),DB-Library 版本的 bcp_control 和 ODBC 版本中的 10。 DB-Library 依赖于默认值 0 以终止大容量复制作的应用程序必须更改,以调用 ODBC bcp_control 将 BCPMAXERRS 设置为 0。
ODBC bcp_control 函数支持 DB-Library 版本的 bcp_control不支持以下选项:
BCPODBC
设置为 TRUE 时,指定以字符格式保存的 datetime 和 smalldatetime 值将具有 ODBC 时间戳转义序列前缀和后缀。 这仅适用于BCP_OUT作。
将 BCPODBC 设置为 FALSE 时,转换为字符串的 日期/时间 值将输出为:
1997-01-01 00:00:00.000将 BCPODBC 设置为 TRUE 时,输出的 日期/时间 值与以下值相同:
{ts '1997-01-01 00:00:00.000' }BCPKEEPIDENTITY
设置为 TRUE 时,指定大容量复制函数插入为具有标识约束的列提供的数据值。 如果未设置,将为插入的行生成新的标识值。
BCPHINTS
指定各种大容量复制优化。 此选项不能用于 6.5 或更低版本的 SQL Server。
BCPFILECP
指定大容量复制文件的代码页。
BCPUNICODEFILE
指定字符模式大容量复制文件是 Unicode 文件。
ODBC bcp_colfmt 函数不支持 SQLCHAR 的file_type 指示器,因为它与 ODBC SQLCHAR typedef 冲突。 请改用 SQLCHARACTER 进行 bcp_colfmt。
在大容量复制函数的 ODBC 版本中,在字符串中使用 datetime 和 smalldatetime 值的格式是 yyyy-mm-dd hh:mm:ss.sss 的 ODBC 格式; smalldatetime 值使用 yyyy-mm-dd hh:mm:ss 的 ODBC 格式。
大容量复制函数的 DB-Library 版本使用多种格式接受字符串中的 datetime 和 smalldatetime 值:
默认格式为 mmm dd yyyy hh:mmxx ,其中 xx 是 AM 或 PM。
DB-Library dbconvert 函数支持的任何格式的 datetime 和 smalldatetime 字符串。
在 SQL Server 客户端网络实用工具的“DB-Library 选项”选项卡上选中“使用国际设置”框时,DB-Library 大容量复制函数还会接受为客户端计算机注册表的区域设置定义的区域日期格式的日期。
DB-Library 大容量复制函数不接受 ODBC datetime 和 smalldatetime 格式。
如果 SQL_SOPT_SS_REGIONALIZE 语句属性设置为SQL_RE_ON,ODBC 大容量复制函数接受为客户端计算机注册表的区域设置定义的区域日期格式的日期。
当以字符格式输出 货币 值时,ODBC 大容量复制函数提供四位数的精度和无逗号分隔符;DB-Library 版本仅提供两位数的精度,并包含逗号分隔符。