2017-03-07 78 views
0

我無法滿足標題中的全部要求。所以,在這裏。如何使用VB.NET將數據從上載的Excel表單加載到Oracle數據庫表中

我有一個非常古老的VB.NET Web應用程序,它從上傳的Excel表格讀取每一行併發送到數據庫進行檢查。 Excel可以包含數千條記錄。這導致了很多數據庫調用,導致性能很差。

爲了避免這種情況,我將每個excel行的關鍵字列都附加到一個字符串中,在代碼本身中構造了一個SQL查詢並傳遞給數據庫執行。我知道這不是一個推薦的方法,但是,性能是我們關注的主要問題,我不知道當時有多少用戶通常在他們的Excel表中有記錄。所以,這是在Excel中的行不超過500-600的假設下開發的。

現在我們正面臨另一個問題。當用戶上傳巨大的Excel文件時,生成的SQL將超出Oracle查詢長度限制(SQL查詢爲4kb,PL/SQL Execute Immediate爲32kb),導致查詢失敗。

我現在正在計劃的是將excel加載到臨時數據庫表中,並通過存儲過程執行檢查。但是,我不能做每個記錄插入,因爲這會導致更多的數據庫調用,這正是我想要首先消除的。我google了一下,發現從VB.NET中通過sqlldr.exe加載,但這似乎並不是一個合適的方法。

我還有其他的選擇嗎?

+0

StackOverflow是關於幫助人們修復他們現有的代碼。請求代碼,教程,研究,工具,建議,庫等 是無關緊要的。請閱讀http://stackoverflow.com/help/how-to-ask,http://stackoverflow.com/help/dont-ask,http://stackoverflow.com/help/mcve並參加[tour]( http://stackoverflow.com/tour)在發佈更多Q​​之前。祝你好運。 – shellter

回答

1

如果是我,我會

  1. Excel文件保存爲CSV
  2. 創建外部表的「點」的CSV文件。
  3. 根據不同的要求,我可以

運行SQL對外部表直接,如果他們只是一次性的

裝入從外部表中數據爲(查詢)常規的Oracle表。

+0

謝謝@BobC。我使用類似的方法,而不是外部表,我使用實際的表作爲外部表,我們需要數據庫服務器中的Excel文檔。從vb.net調用sql loader將數據加載到表中。 –

0

如果我是你,我會批處理它。你已經有了500-600的代碼,所以當你達到那個數量時,運行查詢,然後再做一次。

相關問題