我有一个工具可以读取dBase文件并将内容上传到SQL Server,这是导入shapefile的系统的一部分。它有效但现在我们要求导入包含非英文字符的文件(在这种情况下为挪威语,以后可能是其他语言)并且它们已被破坏。
正在使用OleDbDataAdapter读取dBase文件。单步执行代码我可以看到文本是错误的,因为它被读入。我假设它与代码页或Unicode有关,但我不知道如何解决它。
dBase Reader应用程序告诉我DBF在代码页1252中 - 我不知道这是否正确。我的上传工具在Win7上运行,具有英语(英国)区域设置。
示例:
DBF中的ÅSGARD在VB.Net& SQL Server。DBF中的RINGHORNEØST在VB.Net中成为RINGHORNEÏST 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 :(得分:0)
尝试将此添加到您的DSN:
CollatingSequence=Norwegian-Danish
您也可以使用:
CollatingSequence=International
答案 1 :(得分:0)
检查shapefile是否包含代码页信息。有two places到look
.cpg
的相关单独文件。如果未在这些位置指定代码页,则默认为生成shapefile的PC上的代码页。你只需知道:(
我从未使用它,但也许Shape2SQL可以为你解决这个问题?还是shp2text?我相信PostGIS shapefile loader处理代码页:也许你可以导入到PostGIS中,然后以另一种格式导出?
答案 2 :(得分:0)
老问题,但这可能会为未来的读者解答......
您可以尝试在连接字符串中添加属性设置:
Locale Identifier=1044
ADO与Jet 4.0的OLDB提供程序一起记录了此属性(以及包含此属性的值列表),但我没有理由相信它也不受ADO.Net的支持。 。该值(1044
)是挪威语/丹麦语。
未经测试,但还有其他尝试。