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=   ;Collating Sequence=machine;";
                using (OleDbConnection myConnection = new OleDbConnection(strConn))
                {
                    OleDbDataAdapter adpt = new OleDbDataAdapter("select * from .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;
            }
        }

你可能感兴趣的:(数据库)