gpt4 book ai didi

c++ - 使用 ADO 命令对象实现大容量/批量插入

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:31 25 4
gpt4 key购买 nike

所以我尝试使用 ADO 的 Command 对象实现批量插入功能。

我知道我可以使用 ADO 的 Recordset 对象来做到这一点,如下所示。

// Open table
_RecordsetPtr RecSet = NULL;
RecSet.CreateInstance(__uuidof(Recordset));
RecSet->Open("MY_TABLE", MY_CONNECTION_STRING, adOpenKeyset, adLockBatchOptimistic, adCmdTable);

// Add Rows to Batch
for (int i=0; i<10000; i++) {
RectSet->AddNew(SOME_OBJECT);
}

// Execute batch
RecSet->UpdateBatch(adAffectAll);

我隐藏了大部分细节,但这工作正常。

这种方法的唯一问题是它非常慢..

插入 10,000 条记录,花费了将近 60 秒


我发现 ADO 的 Command 执行命令的速度比 Recordset 对象快得多..

这就是我通常使用 Command 对象插入 10,000 条记录的方式:

_CommandPtr CommPtr;
CommPtr.CreateInstance(__uuidof(Command));
CommPtr->CommandType = adCmdText;
CommPtr->CommandText = L"insert into aggrdb..sequence_number values (999999)";

for (int i=0; i<NUM_RECORDS; i++) {
CommPtr->Execute(NULL, NULL, adExecuteNoRecords);
}

令人惊讶的是,同样的操作执行了大约 24 秒(而使用 Recordset 对象需要 60 秒)。

我现在想要的是使用这个 Command 对象实现批量插入功能..

我上面写的代码是一条一条插入记录,而不是先添加到一个批处理,这样我们只需要执行一个批处理的操作..

查看 ADO 文档,我不知道如何做到这一点。( Documentation Link )

这可能吗?有什么想法吗?

谢谢

最佳答案

批处理代码看起来不错。您可以尝试更改批量大小,看看是否会有任何差异。

ADO::PropertyPtr p1 = pRecordset->Properties->GetItem("Batch Size");

p1->值=100;

另外,请设置CursorLocation,

pRecordset->CursorLocation = ADO::adUseClient;

我认为您正在处理本地数据库,试图连接到远程数据库以查看差异。

关于c++ - 使用 ADO 命令对象实现大容量/批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com