17

How can I get the data in a .dbf file using c#??

What I want to do is to read the data in each row (same column) to further process them.

Thanks.

2
  • Tbh, I am no idea. Now, I can just count the number of row in the .dbf file Commented Jul 6, 2012 at 6:26
  • Have a look at an ODBC connection Commented Jul 6, 2012 at 6:27

3 Answers 3

24

You may create a connection string to dbf file, then using OleDb, you can populate a dataset, something like:

string constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=directoryPath;Extended Properties=dBASE IV;User ID=Admin;Password=;";
using (OleDbConnection con = new OleDbConnection(constr))
{
    var sql = "select * from " + fileName;
    OleDbCommand cmd = new OleDbCommand(sql, con);
    con.Open();
    DataSet ds = new DataSet(); ;
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    da.Fill(ds);
}

Later you can use the ds.Tables[0] for further processing.

You may also check this article Load a DBF into a DataTable

Sign up to request clarification or add additional context in comments.

4 Comments

Thanks a lot. I can do what I wanted now!
You should use directoryPath instead of yourfilepath to avoid misleading... or use specific example, such as: c:\folder
is it possible to get specific row data? like i will pass row index and i should get that specific row data
It is good solution but I found out that oledb of version 4 cannot read files with name longer than 8 characters, it says that object could not be found...
6

I found out the accepted answer didn't work for me, as the .dbf files I'm working with are nested in a hierarchy of directories that makes the paths rather long, which, sadly, cause the OleDbCommand object to throw.

I found a neat little library that only needs a file path to work. Here's a little sample adapted from the examples on its GitHub page:

var file = "C:\\Path\\To\\File.dbf";
using (var dbfDataReader = new DbfDataReader(file))
{
    while (dbfDataReader.Read())
    {
        var foo = Convert.ToString(dbfDataReader["FOO"]);
        var bar = Convert.ToInt32(dbfDataReader["BAR"]);
    }
}

2 Comments

Hi, I had no luck with this API. Did u run it from 32 or 64 bit OS?
This library did work for me out of the box. github.com/henck/dBASE.NET
3

For 64 bit systems I used the Microsoft ACE OLEDB 12.0 data provider, for that provider to work you have to install Microsoft's Access Database Engine 2010

So it looks a lot like the accepted answer but with the provider changed:

string constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;";

using (OleDbConnection con = new OleDbConnection(constr))
{
    var sql = "select * from " + fileName;
    OleDbCommand cmd = new OleDbCommand(sql, con);
    con.Open();
    DataSet ds = new DataSet();
    OleDbDataAdapter da = new OleDbDataAdapter(cmd);
    da.Fill(ds);
}

1 Comment

download link is not available,new link: microsoft.com/en-us/download/details.aspx?id=54920

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.