DBF格式的數據庫是老的數據庫,用foxpro可以打開,社會上那些牛逼的軟件也可以打開。當然微軟的一些軟件也可以打開。
但是如果我們用C#開發的話,需要先安裝一個VFPOLEDBSetup.msi,這個微軟官網上就有下的,網上一搜好多。
可能需要引入兩個庫
using System.Data;
using System.Data.OleDb;
然後開始碼代碼;
最簡單的代碼
public static DataSet ReadSJSHQ()
{
try
{
string strConn = @"Provider=vfpoledb;Data Source=<pdf文件地址> ;Collating Sequence=machine;";
using (OleDbConnection myConnection = new OleDbConnection(strConn))
{
OleDbDataAdapter adpt = new OleDbDataAdapter("select * from <pdf文件名>.dbf", myConnection);
DataSet mySet = new DataSet();
adpt.Fill(mySet);
myConnection.Close();
return mySet;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
}
這樣文件就會讀到myset裏面。
但是會經常報這樣一種錯誤:程序無法確定Decimal值。例如,該行剛剛創建,未提供Decimal列的默認值,並且使用者尚未設置新的Decimal值。
這是因爲那就是有的列是decimal或者float,但是有沒有值,所以需要特殊處理,至於怎麼處理,看情況而定,像我這個直接不要那一列。
public static DataSet ReadDBF()
{
DataSet mySet0 = new DataSet();
string strConn = @"Provider=vfpoledb;Data Source=dbf文件地址;Collating Sequence=machine;";
using (OleDbConnection myConnection = new OleDbConnection(strConn))
{
myConnection.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = myConnection;
cmd.CommandText = "SET DELETED OFF";//去掉刪除標記,拿到所有記錄
cmd.CommandType = CommandType.Text;
cmd.ExecuteNonQuery();
//單獨讀取第一行 ,,如果報錯提供程序無法確定Decimal值。例如,該行剛剛創建,未提供Decimal列的默認值,並且使用者尚未設置新的Decimal值.”
//那就是有的列是decimal或者float,但是有沒有值,所以需要
OleDbDataAdapter adpt0 = new OleDbDataAdapter("SELECT name as name,category as category,subctgry as subctgry from dbf文件名", myConnection);//只有這幾個字段有值
adpt0.Fill(mySet0);
myConnection.Close();
return null;
}
}