IBCPSession::BCPExec (OLE DB)
执行大容量复制操作。
语法
HRESULT BCPExec(
DBROWCOUNT *pRowsCopied);
注释
BCPExec 方法将数据从用户文件复制到数据库表或执行相反的操作,具体取决于与 IBCPSession::BCPInit 方法一起使用的 eDirection 参数的值。
在调用 BCPExec 之前,请用有效的用户文件名调用 BCPInit 方法。该操作失败将导致错误。唯一的例外就是如果查询要用于大容量复制操作。这种情况下,在 BCPInit 方法中将表名指定为 NULL,然后使用 BCP_OPTION_HINTS 选项指定查询。
BCPExec 方法是可能胜任任何时间长度的唯一大容量复制方法。因此,它是支持异步模式的唯一大容量复制方法。若要使用异步模式,请在调用 BCPExec 方法之前,将特定于提供程序的会话属性 SSPROP_ASYNCH_BULKCOPY 设置为 VARIANT_TRUE。此属性位于 DBPROPSET_SQLSERVERSESSION 属性集中。若要完成测试,请用相同参数调用 BCPExec 方法。如果大容量复制尚未完成,则 BCPExec 方法会返回 DB_S_ASYNCHRONOUS。它还会在 pRowsCopied 参数中返回已发送到服务器或从服务器接收的行数的状态计数。发送到服务器的行直到到达一批的末尾时才会提交。
参数
- pRowsCopied[out]
指向 DWORD 的指针。BCPExec 方法用成功复制的行数填充 DWORD。如果将 pRowsCopied 参数设置为 NULL,则 BCPExec 方法会忽略该参数。
返回代码值
S_OK
方法成功。E_FAIL
出现特定于提供程序的错误;有关详细信息,请使用 ISQLServerErrorInfo 接口。E_UNEXPECTED
意外调用了该方法。例如,在调用该方法之前,未调用 BCPInit 方法。如果通过使用 BCP_OPTION_ABORT 选项中止了操作,并且随后调用了 BCPExec 方法,则也会发生此调用。E_OUTOFMEMORY
内存不足错误。DB_S_ENDOFROWSET
大容量复制操作完成,所有数据传输已完成。DB_S_ASYNCHRONOUS
当前这批行已复制。请再次调用 BCPExec 方法以传输下一批。DB_S_ERRORSOCCURRED
在大容量复制操作期间出现错误,可能尚未复制某些行。错误数仍然小于允许的最大错误数。