2012-05-21 49 views
0

我有一個csv文件,我試圖使用C#.NET中的SABulkCopy(Sybase版本的SQLBulkCopy)類導入到Sybase SQL Anywhere數據庫中。 csv文件的第一列映射到Sybase DB中的64位整數主鍵值。在其中一列中也有二進制數據(大於510字節)。使用Jet 4.0 OleDB訪問csv文件可能不是執行批量插入的最佳方式,但我不知道使用csv源文件完成此操作的另一種方法。這樣做的關鍵在於避免將所有插入操作寫入日誌中,因爲blob數據是可擴展的,但需要快速導入。我使用schema.ini文件來映射csv文件中的數據類型,問題是「Long」數據類型僅適用於32位整數。當我將OleDB DataReader提供給SABulkCopy.WriteToServer()時,這會導致錯誤,因爲DB需要一個64位整數,而不是32位整數。Microsoft Jet 4.0是否支持64位整數?

回答

0

你不能使用Jet 4.0來做到這一點,但你並不需要。您可以在http://www.microsoft.com/en-us/download/details.aspx?id=13255獲得64位Access Engine可再發行。您還需要將連接字符串'Provider'更新爲「Microsoft.ACE.OLEDB.12.0」。

如果不可能使用單獨安裝的引擎,則始終可以執行簡單的文件讀取並解析出數據like this

+0

這就是問題所在。我需要使用內置的方法來做到這一點,而不是需要另外安裝的東西。 – user1197862

+0

Jet 4.0引擎也需要「安裝」 - 這只是您正在安裝哪個引擎的問題......如果您安裝了Office 2007或更高版本,則新引擎已可用於連接。無論如何,看看我提供的其他選項是否適合你。 – PinnyM

+0

我最終將構成csv中blob列的實際文件直接導入到數據庫中,從而繞過了處理csv文件的需要。不幸的是,SABulkCopy仍然會將插入操作寫入日誌中,所以我不認爲有任何方法可以避免它。 – user1197862