1

我正在尝试使用 .NET 和 Winforms 读取 dBase III .dbf 文件,但我尝试过的任何方法似乎都不起作用。我尝试了四种不同的连接方法,每一种都挂在Open方法上。没有异常,没有超时,没有事件消息,什么都没有。表格就在那里。关于什么可能是错的任何想法?

这是我尝试过的方法。.dbf 文件位于 d:\db:

private void read1()
        {
            string c = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\db\\;Extended Properties=dBASE III";
            OleDbConnection conn = new OleDbConnection(c);
            conn.Open();
            MessageBox.Show("ok");
            conn.Close();

        }

        private void read2()
        {
            System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
            oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};SourceType=DBF;SourceDB=D:\db;Exclusive=No; Collate=Machine;NULL=NO;DELETED=NO;BACKGROUNDFETCH=NO;";
            oConn.Open();
            System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
            oCmd.CommandText = @"SELECT * FROM D:\db\Poi.dbf";
            DataTable dt = new DataTable();
            dt.Load(oCmd.ExecuteReader());
            MessageBox.Show(dt.Rows.Count.ToString());
            oConn.Close();
        }

        private void read3()
        {
            System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
            oConn.ConnectionString = @"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=d:\db;";
            oConn.Open();
            MessageBox.Show("ok");
            oConn.Close();
        }

        private void read4()
        {
            System.Data.Odbc.OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
            oConn.ConnectionString = @"Driver={Microsoft dBase Driver (*.dbf)};datasource=d:\db\";
            oConn.Open();
            System.Data.Odbc.OdbcCommand oCmd = oConn.CreateCommand();
            oCmd.CommandText = @"SELECT * FROM D:\db\Poi.dbf";
            DataTable dt = new DataTable();
            dt.Load(oCmd.ExecuteReader());
            MessageBox.Show(dt.Rows.Count.ToString());
            oConn.Close();
        }
4

2 回答 2

4

尝试这个:

using (OleDbConnection cn = new OleDbConnection(
    @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
    @"Data Source=C:\full-path-without-filename;" + 
    @"Extended Properties=dBASE III;"))
using (OleDbCommand cm = cn.CreateCommand())
{
    cn.Open();
    cm.CommandText = "SELECT * FROM fox_samp"; // fox_samp is your filename
    using (OleDbDataReader dr = cm.ExecuteReader())
    {
        while (dr.Read())
        {
            Console.WriteLine(dr[0]);
        }
    }
}

我刚刚运行这个没有错误。这个网站非常有用:ConnectionStrings.com

于 2010-01-14T17:07:07.950 回答
1

只是它无法工作,因为 64 位系统不再支持 64 位的 odbc dbf 驱动程序,也不再存在 jet ..

于 2014-06-10T17:14:55.960 回答