C# 數據庫之 DBF

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;
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章