mdb数据库删除了行记录之后,数据库大小不会减少,原因是没有对数据库进行整理,之前的数据缓存一直留在数据库中。可以用ACCESS自带的清理缓存(压缩数据看)工具进行清理。
2003版本
2007版本
在代码中也可以解决这个问题
using JRO;
public void Compact(string mdbPath)
{
try
{
if (!File.Exists(mdbPath)) //检查数据库是否已存在
{
throw new Exception("目标数据库不存在,无法压缩");
}
//声明临时数据库的名称
string bak = DateTime.Now.ToFileTime() + ".bak";//自定义名称
bak = mdbPath.Substring(0, mdbPath.LastIndexOf('\\') + 1) + bak;
//定义临时数据库的连接字符串
string bakconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + bak;
//定义目标数据库的连接字符串
string mdbconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + mdbPath;
//创建一个JetEngineClass对象的实例
JRO.JetEngineClass jt = new JRO.JetEngineClass();
//使用JetEngineClass对象的CompactDatabase方法压缩修复数据库
jt.CompactDatabase(mdbconn, bakconn);
//拷贝临时数据库到目标数据库(覆盖)
File.Copy(bak, mdbPath, true);
//最后删除临时数据库
File.Delete(bak);
m_ProgressBar.writeLogWithoutRunning("\t\t压缩数据库成功。");
}
catch (Exception ex)
{
m_ProgressBar.writeLogWithoutRunning("\t\t压缩数据库失败,请手动压缩。");
}
}
注:
1、JOR命名空间需要引用C:\Program Files\Common Files\System\ado\msjro.dll。
2、需要将引用后的dll的嵌入互操作类型设置为False
3、找不到可安装的 ISAM 主要是数据库连接串,存在问题(例如:Data Source 中间有空格.)。