如何使用VB.NET将上载的Excel工作表中的数据加载到Oracle数据库表中

时间:2017-03-07 21:05:36

标签: .net excel vb.net oracle sql-loader

我无法满足标题中的全部要求。所以,就是这样。

我有一个非常古老的VB.NET Web应用程序,它从上传的Excel工作表中读取每一行并发送到数据库进行检查。 excel可以包含数千条记录。这导致了如此多的数据库调用,导致性能非常差。

为了避免这种情况,我将每个excel行的键列附加到一个字符串中,在代码本身中构造一个SQL查询并传递给数据库以供执行。我知道这不是一种推荐的方法,但是,性能是我们主要关注的问题,我当时并不知道用户通常在excel表中有多少记录。因此,这是在假设excel中的行不超过500-600的情况下开发的。

现在我们面临另一个问题。当用户上传大量excel文件时,生成的SQL超出了Oracle查询长度限制(SQL查询为4kb,PL / SQL执行立即为32kb),导致查询失败。

我现在计划的是将excel加载到临时数据库表中并通过存储过程执行检查。但是,我不能执行每个记录插入,因为这将导致更多的数据库调用,这正是我想要首先消除的。我已经用Google搜索并发现从VB.NET中通过sqlldr.exe加载,但这似乎也不是一种正确的方法。

我还有其他选择吗?

2 个答案:

答案 0 :(得分:1)

如果这是我,我会

  1. 将Excel文件另存为CSV
  2. 创建一个“指向”CSV文件的外部表。
  3. 根据要求,我可以
  4. 直接在外部表上运行SQL(查询),如果它们只是一个

    将外部表中的数据加载到常规Oracle表中。

答案 1 :(得分:0)

如果我是你,我会批处理。您已经拥有500-600的代码,因此当您达到该数量时,运行查询,然后再次执行。