2014-10-07 34 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