方式一:通过ODBC读取 代码如下
/// <summary>
/// 读取dbf文件中的数据 如所在目录为E:\manman\aa.dbf
/// </summary>
/// <param name="tableName">要读取的表名(也就是文件名)aa</param>
/// <param name="defaultDir">文件所在的路径不包括文件名E:\manman</param>
/// <returns></returns>
private DataTable GetDbfDataByODBC(string tableName, string defaultDir)
{
OdbcConnection oConn = new System.Data.Odbc.OdbcConnection();
oConn.ConnectionString = "Driver={Microsoft dBase Driver (*.dbf)};DefaultDir=" + defaultDir;
oConn.Open();
OdbcDataAdapter odbcDataAdapt = new OdbcDataAdapter("select * from " + tableName, oConn.ConnectionString);
DataTable dtData = new DataTable();
dtData.TableName = "gb";
odbcDataAdapt.Fill(dtData);
oConn.Close();
return dtData;
}
方式二:通过VFP读取,不过这需要装VFPOLEDB.1驱动 代码如下
/// <summary>
/// 读取dbf文件中的数据 如所在目录为E:\manman\aa.dbf
/// </summary>
/// <param name="tableName">要读取的表名(也就是文件名)aa</param>
/// <param name="tablePath">文件所在的路径不包括文件名E:\manman\aa.dbf</param>
/// <returns></returns>
private OleDbDataReader DbfToDs(string tableName,string tablePath)
{
string my_StrSel = @"select * from " + tableName;
OleDbConnection mycon = new OleDbConnection("Provider=VFPOLEDB.1;Data Source=" + tablePath + ";collating Sequence=MACHINE");
OleDbCommand mycom = new OleDbCommand(my_StrSel, mycon);
mycon.Open();
OleDbDataReader myreader = mycom.ExecuteReader();
return myreader;
}
private DataTable GetDbfData(string tableName,string tablePath)
{
OleDbDataReader myreader=null ;
try
{
myreader = DbfToDs(tableName,tablePath);
DataTable tab = new DataTable() ;
for (int i = 0; i < myreader.VisibleFieldCount;i++ )
{
tab.Columns.Add(myreader.GetName(i),myreader.GetFieldType(i));
}
DataRow row;
while (myreader .Read ())
{
row = tab.NewRow();
for (int i = 0; i < tab.Columns.Count;i ++ )
{
row[i] = myreader.GetValue(i);
}
tab.Rows.Add(row );
}
return tab;
}
catch (Exception ex)
{
Message.Show(ex.Message);
return null;
}
}
感谢博主http://blog.sina.com.cn/huomanman