日期:2014-05-16  浏览次数:20486 次

关于c# 读取dbf文件的数据库引擎驱动 (特别针对 shp图层的dbf属性文件)

做ae开发的时候,我觉得很多人有个通病,就是创建工作区,工作工厂等等来加载shp,然后用arcgis的方法来获取shp图层的属性,

其实我个人看来这个方法是麻烦的。本身都知道,属性是在shp的附属文件中存在的,为什么不直接就像连接数据库表一样来直接读取呢。

我今天尝试了一下,也是遇到了一个问题的原因。

很简单。单纯的读取dbf,首先命名空间:

using System.Data;//针对OdbcDataAdapter 
using System.Data.OleDb;//这个不用说,与你当前用的数据库引擎驱动有关系
using System.Collections;//这个针对DataTable

我用的驱动是Microsoft Visual FoxPro Driver。

所以首先确认你的机器是否有这么一个驱动(你也可以用其他的,总归都要有驱动)

而windows系统的system32文件夹中的一个vfpodbc.dll这样的dll。如果您没有转新的vfpodbc驱动器,那么这个dll可能是20kb的大小,这个呢,对于做开发来说是不够的,里面缺少很多的内容。因此下载一个合适的驱动:http://download.csdn.net/source/1869412;这是地址,不行就把系统C盘 windows System32 中的 vfpodbc.dll 换了,原来的大概有20多K,去百度一下,找个900多的K的vfpodbc.dll换了就可以了。

这样,你就可以大胆的写代码了。

DataTable dt = new DataTable();

System.Data.Odbc.OdbcConnection conn = new System.Data.Odbc.OdbcConnection();
string table = @"d:\test.dbf";
        string connStr = @"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=" + table + ";Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO"; 

        conn.ConnectionString = connStr;
        conn.Open(); 
        String sql = "select * from " + table;
        OdbcDataAdapter da = new OdbcDataAdapter(sql, conn); 
        da.Fill(dTable);


如果你出现这个问题。可以测试一下试试。