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