我正在构建一个与 Oracle 11g 数据库对话的 .NET 应用程序。我正在尝试从第三方提供的 Excel 文件中获取数据并进行更新(UPDATE
如果存在,则记录,INSERT
如果不存在),但在性能方面遇到了一些问题。
这些 Excel 文件用于替换关税代码和描述,因此每个文件中有几千条记录。
| Tariff | Description |
|----------------------------------------|
| 1234567890 | 'Sample description here' |
我对批量插入进行了一些研究,甚至编写了一个在应用程序中打开事务,执行一堆UPDATE
orINSERT
语句,然后提交的函数。不幸的是,这需要很长时间并且会延长应用程序和数据库之间的会话。
public void UpsertMultipleRecords(string[] updates, string[] inserts) {
OleDbConnection conn = new OleDbConnection("connection string here");
conn.Open();
OleDbTransaction trans = conn.BeginTransaction();
try {
for (int i = 0; i < updates.Length; i++) {
OleDbCommand cmd = new OleDbCommand(updates[i], conn);
cmd.Transaction = trans;
int count = cmd.ExecuteNonQuery();
if (count < 1) {
cmd = new OleDbCommand(inserts[i], conn);
cmd.Transaction = trans;
}
}
trans.Commit();
} catch (OleDbException ex) {
trans.Rollback();
} finally {
conn.Close();
}
}
我通过 Ask Tom 发现,执行此类操作的一种有效方法是使用 OracleMERGE
语句,该语句在 9i 中实现。据我了解,这只能使用 Oracle 中的两个现有表。我已经尝试过但不了解临时表,或者如果可能的话。如果我创建一个只保存我的数据的新表MERGE
,我仍然需要一种可靠的批量插入方式。