2014-10-07 103 views
2

我使用JET oleDb 4.0创建DBF文件,但数字字段始终最终为(20.5)大小。这是我在网上阅读的一个已知问题。许多人建议使用我试过的Visual FoxPro oleDb,但是我需要在ArcMap中打开DBF文件,并且出现错误的字段类型错误。我猜这个文件格式不被支持。如果我打开使用FoxPro中的FoxPro oledb创建的DBF并将其导出为DBase IV格式,则可以在ArcMap中打开它。Vb.net,DBF文件,无法设置数字大小(始终为20.5)

但是,当我创建它时,我已经使用“扩展属性= dBase IV”选项,它似乎没有做任何事情。

我必须找到一种方法来获得DBASE IV格式的正确字段大小。有人能帮我吗?

这是我的连接字符串:

提供商= Microsoft.Jet.OLEDB.4.0;数据源= {0};扩展属性= dBase的IV; 这使得总是让数字在20.5大小

提供商= vfpoledb;数据源= {0};整理顺序=一般;扩展属性= dBase的IV; 这使得不兼容的DBF为ArcMap中

回答

1

看看this answer for encoding.

它使用VFP OLEDB提供程序,只是忽略的代码页引用的情况下。创建表语法将是类似的,您可以根据需要定义数字字段。下一个关键部分是在部分使用VFPScript的...

string vfpScript = @"use MyTest1 
      Copy to MyTest2 type foxplus"; 


    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "ExecScript"; 
    command.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript; 
    command.ExecuteNonQuery(); 

这需要.dbf文件从VFP正常文件头到dBASE兼容(早期FoxPro中)的文件头,其应与兼容你需要什么。

+1

谢谢,它现在可行!我只有另一个小问题,即字段不能包含空值。但我只需要改变我的代码插入其他值比空值,它运作良好。 – Math 2014-10-08 19:53:02

+0

@Math,对于较老的dBASE,我不记得它是否允许NULL与NOT NULL,但是您总是可以在create table语句中的相应列之后尝试添加。 – DRapp 2014-10-08 23:53:19

+0

我试过了,它不起作用。对于不允许空设置的较老的dBASE文件您是正确的。但我不再需要它了,因为我删除了空值插入。谢谢! – Math 2014-10-09 12:43:38