如何改进-使用多个OledbConnections使用不同ID的多个插入物

问题描述 投票:0回答:2

当前,系统正在创建多个OledbConnections,并且该过程需要很长时间才能完成,总结如下:

C#代码:

  1. 从表A中选择所有人。
  2. 每个人:进行选择以查看表B中是否存在表A的ID'x'。
  3. 每个人:使用表A的ID或新ID(如果表B中已经存在该ID插入)

[所有这些插入都会为每个人创建一个新的OledbConnection,例如3k人,这会花费太长时间。

如果我不必处理ID会更容易,但是我没有找到一种使用VFP的好方法。

这是批量插入或提高性能的方法吗?

bulkinsert visual-foxpro foxpro insert-select
2个回答
0
投票

如果表2中的id是自动编号:

if exists(select * from table2 where id = idtable1)

    insert into table2(field1,field2...

else

    insert into table2(ID,field1,field2...

0
投票

我不明白为什么您需要为此使用多个OleDbConnections。单个连接即可:

string sql = @"insert into tableB (id, f1, f2, f3)
select getNextId('tableB'), f1, f2, f3
from tableA
where exists (select * from tableA where tableA.id = tableB.id)";

using (OleDbConnection cn = new OleDbConnection(@"Provider=VFPOLEDB;Data Source=c:\MyDataFolder"))
using (OleDbCommand cmd = new OleDbCommand(sql, cn))
{
  cn.Open();
  cmd.ExecuteNonQuery();
  cmd.CommandText = @"insert into tableB (id, f1, f2, f3)
select id, f1, f2, f3
from tableA
where not exists (select * from tableA where tableA.id = tableB.id)";
  cmd.ExecuteNonQuery();
  cn.Close();
}

使用的SQL可能不正确,因为从您的定义来看,您实际上并不确定要做什么。

而且顺便说一句,您没有在说什么版本,如果Foxpro表表示VFP表,则有autoinc int字段(但不一定要像示例中一样始终具有自己的getNextId函数)。

© www.soinside.com 2019 - 2024. All rights reserved.