如何使用 VB.NET 将数据从上传的 excel sheet 加载到 Oracle 数据库 table
How to load data from an uploaded excel sheet into Oracle database table using VB.NET
我无法满足标题中的全部要求。所以,就在这里。
我有一个非常古老的 VB.NET 网络应用程序,它从上传的 excel sheet 中读取每一行并发送到数据库进行检查。 excel 可以包含数千条记录。这导致了如此多的数据库调用并导致性能非常差。
为了避免这种情况,我将每个 excel 行的键列附加到一个字符串中,在代码本身中构建了一个 SQL 查询并传递给数据库执行。我知道这不是推荐的方法,但是性能是我们最关心的问题,我不知道当时用户通常在 excel sheet 中有多少条记录。因此,这是在 excel 中的行不超过 500-600 的假设下开发的。
现在我们面临另一个问题。当用户上传巨大的 excel 文件时,生成的 SQL 超出了 Oracle 查询长度限制(SQL 查询为 4kb,PL/SQL 立即执行为 32kb)导致查询失败。
我现在的计划是将 excel 加载到临时数据库 table 中,并通过存储过程执行检查。但是,我无法对每条记录进行插入,因为这将导致更多的数据库调用,而这正是我首先要消除的。我用谷歌搜索并找到了从 VB.NET 中通过 sqlldr.exe 加载的方法,但这似乎也不是一个正确的方法。
我还有其他选择吗?
如果我是你,我会批处理它。您已经有了 500-600 的代码,所以当您达到该金额时,运行 查询,然后再执行一次。
如果是我,我会
- 将 excel 文件另存为 CSV
- 创建一个 table 外部 "points" CSV 文件。
- 根据要求,我可以
运行 SQL(查询)直接在外部 table 如果它们只是一次性的
或
将数据从外部 table 加载到常规 Oracle table。
我无法满足标题中的全部要求。所以,就在这里。
我有一个非常古老的 VB.NET 网络应用程序,它从上传的 excel sheet 中读取每一行并发送到数据库进行检查。 excel 可以包含数千条记录。这导致了如此多的数据库调用并导致性能非常差。
为了避免这种情况,我将每个 excel 行的键列附加到一个字符串中,在代码本身中构建了一个 SQL 查询并传递给数据库执行。我知道这不是推荐的方法,但是性能是我们最关心的问题,我不知道当时用户通常在 excel sheet 中有多少条记录。因此,这是在 excel 中的行不超过 500-600 的假设下开发的。
现在我们面临另一个问题。当用户上传巨大的 excel 文件时,生成的 SQL 超出了 Oracle 查询长度限制(SQL 查询为 4kb,PL/SQL 立即执行为 32kb)导致查询失败。
我现在的计划是将 excel 加载到临时数据库 table 中,并通过存储过程执行检查。但是,我无法对每条记录进行插入,因为这将导致更多的数据库调用,而这正是我首先要消除的。我用谷歌搜索并找到了从 VB.NET 中通过 sqlldr.exe 加载的方法,但这似乎也不是一个正确的方法。
我还有其他选择吗?
如果我是你,我会批处理它。您已经有了 500-600 的代码,所以当您达到该金额时,运行 查询,然后再执行一次。
如果是我,我会
- 将 excel 文件另存为 CSV
- 创建一个 table 外部 "points" CSV 文件。
- 根据要求,我可以
运行 SQL(查询)直接在外部 table 如果它们只是一次性的
或
将数据从外部 table 加载到常规 Oracle table。