2016年3月29日 星期二

[ASP.NET] OLEDB,ODBC 讀取 DBF




//範例一: 利用Oledb讀取DBF資料庫
string dbDirectory = @"d:\tmp";(檔案所在資料夾)
string database = "World.dbf";
string sql = "select * from " + database;
string cnstr ;
DataTable dt = OleDbDataTable(databaseDirectory, sql);

public static OleDbConnection OleDbOpenConn(string dbDirectory)
{
    cnstr =  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbDirectory + ";";
    cnstr+=" Extended Properties=dBASE IV; User ID=Admin; Password=;";
    cnstr = string.Format(cnstr);
    OleDbConnection icn = new OleDbConnection();
    icn.ConnectionString = cnstr;
    if (icn.State == ConnectionState.Open) icn.Close();
    icn.Open();
    return icn;
}

public static DataTable OleDbDataTable(string dbDirectory, string OleDbString)
{
    DataTable myDataTable = new DataTable();
    OleDbConnection icn = OleDbOpenConn(dbDirectory);
    OleDbDataAdapter da = new OleDbDataAdapter(OleDbString, icn);
    DataSet ds = new DataSet();
    ds.Clear();
    da.Fill(ds);
    myDataTable = ds.Tables[0];
    if (icn.State == ConnectionState.Open) icn.Close();
    return myDataTable;
}

//範例二: 利用Odbc讀取DBF資料庫
string database = @"d:\tmp\World.dbf";
string sql = "select * from " + database;
string cnstr
DataTable dt = OdbcDataTable(database, sql);

public static OdbcConnection OdbcConn(string Database)
{
    cnstr = "Driver={Microsoft dBase Driver (*.dbf)}; SourceType=DBF; ";
    cnstr+="SourceDB=" + Database + ";  Exclusive=No; Collate=Machine;";
    cnstr+="NULL=NO; DELETED=NO; BACKGROUNDFETCH=NO;";
    OdbcConnection icn = new OdbcConnection();
    icn.ConnectionString = cnstr;
    if (icn.State == ConnectionState.Open) icn.Close();
    icn.Open();
    return icn;
}

public static DataTable OdbcDataTable(string Database, string OdbcString)
{
    DataTable myDataTable = new DataTable();
    OdbcConnection icn = OdbcConn(Database);
    OdbcDataAdapter da = new OdbcDataAdapter(OdbcString, icn);
    DataSet ds = new DataSet();
    ds.Clear();
    da.Fill(ds);
    myDataTable = ds.Tables[0];
    if (icn.State == ConnectionState.Open) icn.Close();
    return myDataTable;