最近做了一个小项目,关于读写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
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的字符串就简单很多了
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的一些心得,其中可能会有不正确的地方,欢迎指正!