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
大容量复制作期间出错,某些行可能尚未复制。 错误数仍小于允许的最大错误数。

另请参阅

IBCPSession (OLE DB)
执行大容量复制操作