private string prefix
{ get { return "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Engine Type=5;Data Source="; } }

//mdbAbsolute:文件名
//優點:生成mdb大小為64k
//缺點:生成mdb被當前程序占用
//     文件夾不存在不能創建
public void Create(string mdbAbsolute)
{

    if (File.Exists(mdbAbsolute)) throw new Exception("目標數據庫已存在,無法創建");
    mdbAbsolute = prefix + mdbAbsolute;
    ADOX.CatalogClass cat = new ADOX.CatalogClass();
    cat.Create(mdbAbsolute);       
}     

//壓縮
public void Compact(string mdbPath)
{
    if (!File.Exists(mdbPath)) throw new FileNotFoundException("
目標數據庫不存在,無法壓縮");

    //臨時數據庫的名稱
    string temp = Guid.NewGuid().ToString() + ".bak";
    temp = mdbPath.Substring(0, mdbPath.LastIndexOf("\\") + 1) + temp;

    //臨時數據庫的連接字符串
    string temp2 = prefix + temp;
    //
目標數據庫的連接字符串
    string mdbPath2 = prefix + mdbPath;
    JRO.JetEngineClass jec = new JRO.JetEngineClass();
    jec.CompactDatabase(mdbPath2, temp2);
    File.Copy(temp, mdbPath, true);
    File.Delete(temp);
}      

//備份
public void Backup(string mdbSource, string mdbTarget)
{
    if (!File.Exists(mdbSource)) throw new FileNotFoundException("
源數據庫不存在");
    try { File.Copy(mdbSource, mdbTarget, true); }
    catch (IOException ioe) { throw new IOException(ioe.ToString()); }
}

//還原
public void Recover(string mdbSource, string mdbTarget)
{
    if (!File.Exists(mdbSource)) throw new FileNotFoundException("
備份數據庫不存在");
    try { File.Copy(mdbSource, mdbTarget, true); }
    catch (IOException ioe) { throw new IOException(ioe.ToString()); }
}


引用COM組件
C:\Program Files\Common Files\System\ado\msadox.dll
C:\Program Files\Common Files\System\ado\msjro.dll

注:新建mdb也可以使用還原的方式來創建,相信大家都想到了

這幾個方法的組合可以完成一般的需求

因為需求中備份是針對用戶,而不是整個mdb文件,呵呵,所以還有一個 下


 

其他參考資料
access和m$sql 數據類型比較
http://office.microsoft.com/zh-cn/access/HP052745732052.aspx


oracle數據類型
http://www.ss64.com/orasyntax/datatypes.html

access數據類型
http://www.wcape.school.za/subject/CS/PHS/acctable/datatype.htm

access,sqlserver,oracle
http://www.fzs8.net/database/2007-05-23/3905.html