解决Access数据库膨胀的问题
来源:互联网 发布:淘宝网中老年羽绒服 编辑:程序博客网 时间:2024/06/05 16:55
前言:
在使用ACCESS数据库的过程中,我们经常会发现,经常做删除操作,会导致数据不断的膨胀,原因就是ACCESS数据库在做删除操作后,并不释放原记录所占用的空间。
由于Jet引擎的限制,执行此方法压缩Access数据库会把结果生成为一个新文件,所以我们要还需要把这个新的Access文件拷贝到目的位置覆盖原来未压缩文件.
当调用此方法时请确认被压缩数据库无打开的连接.
/// <summary>
/// 修复和压缩ACCESS数据库/// </summary>
/// <param name="dbFileDir">数据库文件的路径</param>
public static void CompactAccessDB(string dbFileDir)
{
//应用程序的路径
string strAppDir = System.AppDomain.CurrentDomain.BaseDirectory;
//数据库的名称
DirectoryInfo directoryInfo = null;
//用于存放修复和压缩后的ACCESS数据库
try
{
//判断是否存在目录,不存在就删除
directoryInfo =new DirectoryInfo(strDataDir);
if(directoryInfo.Exists)
Directory.Delete(strDataDir, true);//删除文件
directoryInfo.Create();
//是否存在相同的文件,存在就删除
string compactDbDir = strDataDir +"\\" +dbName;
FileInfo fileStr =new FileInfo(compactDbDir);
if(fileStr.Exists)
System.IO.File.Delete(compactDbDir);
//要压缩的数据库连接串
string sourceConnectionStr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + dbFileDir + @";User ID=admin;Password=;JET OLEDB:Database Password=100;";
//压缩和修复后数据库的连接串
//创建一个JetEngineClass对象的实例
JRO.JetEngineClass jt = new JRO.JetEngineClass();
//压缩和修复ACCESS数据库
jt.CompactDatabase(sourceConnectionStr, destConnectionStr);
System.IO.File.Copy(compactDbDir, dbFileDir, true);
//删除文件
if (directoryInfo.Exists)
Directory.Delete(strDataDir, true);
}
catch(Exception ex)
{
CCLib.MV.LogTool.WriteEduAppLog(ex.Message, ex.StackTrace);
if (directoryInfo!=null&&directoryInfo.Exists)
Directory.Delete(strDataDir, true);//删除文件
}
}
在此过程中,需要注意的问题:
1: 引用C:\Program Files\Common Files\System\ado\msjro.dll,该DLL包含JRO命名空间
2:无法嵌入互操作类型...请改用适用的接口 解决办法 ,修改的方法为:选中项目中引入的dll,鼠标右键, 选择属性, 把“嵌入互操作类型”设置为False。
3:找不到可安装的 ISAM 主要是数据库连接串,存在问题(例如:Data Source 中间有空格.)。
- 解决Access数据库膨胀的问题
- dsum 解决 access数据库中 update的子查询问题
- 解决UE4缓存使C盘膨胀的问题
- 解决Apache日志文件ACCESS.LOG日益膨胀的一个办法
- 解决Apache日志文件ACCESS.LOG日益膨胀的一个办法
- 解决国外空间access数据库乱码问题
- access数据库打开的问题
- 关于Access数据库的问题
- Access数据库无法连接的解决
- 今天解决的问题:在vc中往Access数据库写中文时出现乱码。
- 如何解决用Access数据库建站维护不便的问题
- 终于赶在软件测试部前头解决Access数据库压缩的问题。
- 对 Access 数据库中日期字段操作时 OleDbParameter 的问题及解决
- 终于赶在软件测试部前头解决Access数据库压缩的问题
- 解决Eclipse Access restriction 的问题
- 关于Access restriction 问题的解决
- Delphi Access violations 问题的解决
- 解决Access文件越来越大的问题
- 网络数据包收发流程(四):协议栈之packet_type
- 示例程序GENERIC.RC
- Box2D C++教程-自定义重力9
- 示例程序GENERIC.DLG
- Minesweeper(暴力,注意特判)
- 解决Access数据库膨胀的问题
- Spring中Singleton模式的线程安全
- poj 2243 Knight Moves
- 使用Capture 制作元件库
- RegisterWindowMessage函数解释
- 使用Capture画原理图
- Vaadin Web应用开发教程(40):使用主题-创建和应用新主题
- 使用Pad Designer制作焊盘
- 使用PCB Editor 制作元件封装Footprint