2011-03-15 80 views
1

我有一個讀取dBase文件並將內容上傳到SQL Server的工具,這是導入shapefile的系統的一部分。它可以工作,但現在我們需要導入包含非英文字符的文件(在這種情況下是挪威語,以後可能是其他語言)並且它們已被損壞。使用非英文字符讀取dBase DBF的問題

正在使用OleDbDataAdapter讀取dBase文件。瀏覽代碼我可以看到文本在讀入時是錯誤的。我假設這是與代碼頁或Unicode有關的,但我不知道如何解決它。

dBase Reader應用程序告訴我DBF在代碼頁1252中 - 我不知道這是否正確。我的上傳工具使用英文(英國)區域設置在Win7上運行。

例子:

阿斯加德在DBF成爲+在VB.Net & SQL服務器SGARD。

DBF中的RINGHORNEØST變成RINGHORNE在VB.Net中的SQL Server。

,讀取DBF代碼:

dbfConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";Extended Properties=dBASE IV" 
Cnn.ConnectionString = dbfConnectionString 
Cnn.Open() 

strSQL = "SELECT * FROM [" & strDBF & "]" 
DA = New OleDb.OleDbDataAdapter(strSQL, Cnn) 
DS = New DataSet 
DA.Fill(DS) 

If DS.Tables(0).Rows.Count > 0 Then 
    dtDBF = DS.Tables(0) 
Else 
    dtDBF = Nothing 
End If 

數據被讀取,如:名稱= dtDBF.Rows(指數)( 「NAME_1」)

有沒有辦法告訴OleDbDataAdapter的是什麼代碼頁從VB.Net使用或更好的方式來讀取dBase文件?

+0

如果我導入或鏈接dBase表,MS Access與.net/SQL Server的功能相同。 – Irongut 2011-03-18 16:12:58

回答

0

嘗試添加以下內容到DSN:

CollatingSequence=Norwegian-Danish 

您可能還可以使用:

CollatingSequence=International 
+0

不幸的是,這些解決了這個問題,挪威的字符仍然被錯誤地讀取。 – Irongut 2011-03-18 14:34:06

0

檢查shape文件是否包含代碼頁信息。有two placeslook

  • 照照language driver ID(LDID),這是在shape文件的DBF表格標題中(第29字節)。
  • 查找擴展名爲.cpg的關聯單獨文件。

如果未在這些位置指定代碼頁,則默認爲生成shapefile的PC上的代碼頁。你只需要知道:(

我從來沒有使用過它,但也許Shape2SQL需要照顧這對你還是shp2text我相信PostGIS shapefile loader處理代碼頁:??也許你可以導入PostGIS的再出口在另一種格式?

+0

沒有cpg文件,最初生成這些shapefile文件的PC在另一個國家的另一個組織中,所以我不知道它的代碼頁設置爲什麼。這些形狀文件將由GIS人員編輯,然後每週上傳到數據庫幾次,因此對於他們來說這需要一個簡單的過程。我們目前的流程已經爲英國形狀文件運行了18個月,所以我們確實需要爲挪威的文件製作。 ESRI鏈接非常方便,謝謝。 – Irongut 2011-03-18 16:14:02

+0

你知道另一臺PC在挪威,所以他們可能使用代碼頁Windows-1252,就像英國一樣。我很驚訝你會遇到這個問題。你是否檢查過DBF文件中的語言驅動程序ID?只需在Visual Studio二進制編輯器中打開它(文件 - 打開文件 - 使用二進制編輯器打開) – MarkJ 2011-03-18 16:36:47

0

老問題,但是這可能會回答它爲未來的讀者......

你可以嘗試將您的連接字符串中的屬性設置:

Locale Identifier=1044 

ŧ他的財產(以及包括這個值的值列表)是針對ADO與Jet 4.0的OLDB Provider一起記錄的,但我沒有理由相信ADO.Net也不支持它。此值(1044)是挪威語/丹麥語。

未經測試,但別的嘗試。