.Net(C#)操作DBF心得

最近做了一个小项目,关于读写DBF的,把心得写下来,分享一下

 

首先感谢bluesky521,很多关于DBF的心得,都是从他的博客学到的,我这里只是整理一下而已

(bluesky521 Blog地址:http://www.cnblogs.com/bluesky521/archive/2006/10/22/536788.html 

 

关于读取DBF

主要分ODBC与OLEDB这两种方式,对于一般机器来说ODBC的驱动是有的,不需要另外安装,但对于用OLEDB方式访问DBF就要下载驱动了

 

连接不同的数据库,无非就是连接字符串的不同,以下我将写一下连接DBF不同方式下的连接字符串

1.ODBC

ODBC驱动:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c 

string connStr =

@"Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB= C:/test.dbf;Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO"; 

红色标记的就是你的DBF文件全路径

注意的是,用ODBC访问DBF是用全路径作为表名的

eg:你的DBF放在C:,路径就是C:/test.dbf

组建select语句的时候,写法应该是以下形式

string sql = @"select * from [C:/test.dbf]"

(加上 '[' 和 ']' 是为了防止路径中间出现空格或特殊字符,否则sql语句是无法执行的)

 

 

2.OLEDB

OLEDB驱动:http://www.microsoft.com/downloads/details.aspx?FamilyID=e1a87d8f-2d58-491f-a0fa-95a3289c5fd4&DisplayLang=en

 

oledb的字符串就简单很多了

ConnectionString = @"Provider=VFPOLEDB.1;DATA Source=C:/";

datasource部分只是dbf存放路径就可以,当然全路径也没有问题的

select的时候也简单很多

string sql = @"select * from test"(test是你的dbf文件名) 

 

关于写入DBF

1.ODBC

我用ODBC的DataAdapter进行Update的是否会抛异常,我也没弄明白哪个环节出错,最后逼着自己去写Command手动Insert

一般时候写Insert的都是这样写

string sql = "insert tableA (A, B, C) values(?, ?, ?)";

然后再手动加参数

对于非数值型的参数可以这样做,但对于数值型这样操作会出错,抛出异常

System.Data.Odbc.OdbcException:ERROR [22018] [Microsoft][ODBC Visual FoxPro Driver]Data type mismatch.

(这个问题我也没有弄明白)

所以sql语句就要自己拼接了,不能用'?'去添加参数 

eg:

int X = 0;

string sql = "insert tableA (A, B, C) values(?, ?, " + X.ToString() + ")";

参数多的时候不推荐用ODBC方式,会很痛苦的

 

2.OLEDB

OLEDB是个好东西,用DataAdapter的Update没有错误,也不用手动写Insert,放心用吧!

 

总结了一下DBF的使用心得,其实还有一个问题还没有弄明白的,就是对某些DBF进行操作的时候

抛出异常 Variable 'XXX' is not found (XXX是随机的)

对于这个问题,恳请各位高手进行指导

 

以上是我的关于DBF的一些心得,其中可能会有不正确的地方,欢迎指正!

 

 

 

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页