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