1.前言:
DBF為dBASE/VFP的資料庫格式,透過使用OLEDB/ODBC的方式,可以讀取資料庫的內容。
2.說明:
程式碼:
//範例一: 利用Oledb讀取DBF資料庫
public static OleDbConnection OleDbDbfOpenConn(string DatabaseDirectory)
{
string cnstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DatabaseDirectory + "; Extended Properties=dBASE IV; User ID=Admin; Password=;");
OleDbConnection icn = new OleDbConnection();
icn.ConnectionString = cnstr;
if (icn.State == ConnectionState.Open) icn.Close();
icn.Open();
return icn;
}
public static DataTable GetOleDbDbfDataTable(string DatabaseDirectory, string OleDbString)
{
DataTable myDataTable = new DataTable();
OleDbConnection icn = OleDbDbfOpenConn(DatabaseDirectory);
OleDbDataAdapter da = new OleDbDataAdapter(OleDbString, icn);
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds);
myDataTable = ds.Tables[0];
if (icn.State == ConnectionState.Open) icn.Close();
return myDataTable;
}
//範例二: 利用Odbc讀取DBF資料庫
public static OdbcConnection OdbcDbfOpenConn(string Database)
{
string cnstr = "Driver={Microsoft dBase Driver (*.dbf)}; SourceType=DBF; SourceDB=" + Database + "; Exclusive=No; Collate=Machine; NULL=NO; DELETED=NO; BACKGROUNDFETCH=NO;";
OdbcConnection icn = new OdbcConnection();
icn.ConnectionString = cnstr;
if (icn.State == ConnectionState.Open) icn.Close();
icn.Open();
return icn;
}
public static DataTable GetOdbcDbfDataTable(string Database, string OdbcString)
{
DataTable myDataTable = new DataTable();
OdbcConnection icn = OdbcDbfOpenConn(Database);
OdbcDataAdapter da = new OdbcDataAdapter(OdbcString, icn);
DataSet ds = new DataSet();
ds.Clear();
da.Fill(ds);
myDataTable = ds.Tables[0];
if (icn.State == ConnectionState.Open) icn.Close();
return myDataTable;
}
3.應用:
//範例一: 利用Oledb讀取DBF資料庫 string databaseDirectory = @"d:\tmp"; string database = "World.dbf"; string sql = "select * from " + database; DataTable dt = GetOleDbDbfDataTable(databaseDirectory, sql); //範例二: 利用Odbc讀取DBF資料庫 string database = @"d:\tmp\World.dbf"; string sql = "select * from " + database; DataTable dt = GetOdbcDbfDataTable(database, sql);
圖例:
文章標籤
全站熱搜

謝謝您的分享,個人已經可以由DBF中取出資料; 請教您: 1.以同樣方法sekect另一DBF檔,同樣也有where子句,但卻卡在DataAdapter.Fill(myDataSet),//DataAdapte後,程式是順利結束的,我想應該與SELECT的WHERW條件複雜度無關才是,您認為卡住的原因是? 2.c#以OleDb方式update、delete DBF裡的資料時,也會同時更動CDX檔嗎? *CDX檔是DBF的索引檔 謝謝!
你好, 1. 如果程式在OleDbConnection過了表示連線字串沒問題,在OleDbDataAdapter發生問題通常的情況是select的語句造成的影響,一般像在Oracle/SQL中我會先測試sql語句是否可以正常查詢後,再寫到程式碼當中,複雜的語句還要檢查中間加引號/空白的時候有無錯誤,可用中斷查看sql語句確認有無錯誤. 2.我在操作DBF檔案時,並未加入索引檔,但是用oledb操作時,只是對dbf文件進行更新,刪除,cdx的文件是不會連動改變,只有使用Visual FoxPro的驅動開啟資料庫時,相關的操做才會自動同步更新.
請問 1. 原來 用 Visual FoxPro寫的 資訊管理系統, 可以 沿用 DBF格式 , 用 C# 改寫 嗎 ? 2. 可以 改用 POSGRESSQL 嗎 ?
您好, 1.利用C#可以操作DBF資料庫,因此程式介面用C#來寫是可行的。 2.資料庫的轉換要考慮多種因素,無論使用那一類資料庫, 只要定義好schema,確認每個欄位資料格式,原則上從DBF轉其他 的資料庫都是可行。 einboch
謝謝 版主 指教 ! 提問 是因為 怕 ms 只推銷自己 的 mssql , 而不 支援DBF, PostgreSQL , 像 拋棄 VFP 一樣 . 另外 , C# 可在 LINUX上 RUN嗎?
您好, C#跨平台可以參考mono的專案 可在www.mono-project.com下載, einboch