C# 压缩和修复Access数据库
C# 压缩和修复Access数据库
转载自:http://www.cnblogs.com/SparkZG/p/6530398.html
1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Collections; 5 using System.Web; 6 using System.Web.Security; 7 using System.Web.UI; 8 using System.Web.UI.WebControls; 9 using System.Web.UI.WebControls.WebParts; 10 using System.Web.UI.HtmlControls; 11 using ADOX;//该命名空间包含创建ACCESS的类(方法)--解决方案 ==> 引用 ==> 添加引用 ==> 游览找到.dll 12 using JRO; 13 using System.IO;//该命名空间包含压缩ACCESS的类(方法) 14 15 16 /// <summary> 17 /// 当使用Access中,请浏览添加引用以下两个dll 18 /// 引用C:\Program Files\Common Files\System\ado\msadox.dll,该DLL包含ADOX命名空间 19 /// 引用C:\Program Files\Common Files\System\ado\msjro.dll,该DLL包含JRO命名空间 20 /// </summary> 21 public partial class Access : System.Web.UI.Page 22 { 23 protected void Page_Load(object sender, EventArgs e) 24 { 25 26 } 27 #region 根据指定的文件名称创建Access数据库 28 /// <summary> 29 /// 根据指定的文件名称创建数据 30 /// </summary> 31 /// <param name="DBPath">绝对路径+文件名称</param> 32 public static void CreateAccess(string DBPath) 33 { 34 if (File.Exists(DBPath))//检查数据库是否已存在 35 { 36 throw new Exception("目标数据库已存在,无法创建"); 37 } 38 DBPath = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath; 39 //创建一个CatalogClass对象实例 40 ADOX.CatalogClass cat = new ADOX.CatalogClass(); 41 //使用CatalogClass对象的Create方法创建ACCESS数据库 42 cat.Create(DBPath); 43 44 } 45 #endregion 46 47 #region 压缩Access数据库 48 /// <summary> 49 /// 压缩Access数据库 50 /// </summary> 51 /// <param name="DBPath">数据库绝对路径</param> 52 public static void CompactAccess(string DBPath) 53 { 54 if (!File.Exists(DBPath)) 55 { 56 throw new Exception("目标数据库不存在,无法压缩"); 57 } 58 59 //声明临时数据库名称 60 string temp = DateTime.Now.Year.ToString(); 61 temp += DateTime.Now.Month.ToString(); 62 temp += DateTime.Now.Day.ToString(); 63 temp += DateTime.Now.Hour.ToString(); 64 temp += DateTime.Now.Minute.ToString(); 65 temp += DateTime.Now.Second.ToString() + ".bak"; 66 temp = DBPath.Substring(0, DBPath.LastIndexOf("\\") + 1) + temp; 67 //定义临时数据库的连接字符串 68 string temp2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + temp; 69 //定义目标数据库的连接字符串 70 string DBPath2 = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath; 71 //创建一个JetEngineClass对象的实例 72 JRO.JetEngineClass jt = new JRO.JetEngineClass(); 73 //使用JetEngineClass对象的CompactDatabase方法压缩修复数据库 74 jt.CompactDatabase(DBPath2, temp2); 75 //拷贝临时数据库到目标数据库(覆盖) 76 File.Copy(temp, DBPath, true); 77 //最后删除临时数据库 78 File.Delete(temp); 79 } 80 #endregion 81 82 #region 备份Access数据库 83 /// <summary> 84 /// 备份Access数据库 85 /// </summary> 86 /// <param name="srcPath">要备份的数据库绝对路径</param> 87 /// <param name="aimPath">备份到的数据库绝对路径</param> 88 /// <returns></returns> 89 public static void Backup(string srcPath, string aimPath) 90 { 91 92 if (!File.Exists(srcPath)) 93 { 94 throw new Exception("源数据库不存在,无法备份"); 95 } 96 try 97 { 98 File.Copy(srcPath, aimPath, true); 99 } 100 catch (IOException ixp) 101 { 102 throw new Exception(ixp.ToString()); 103 } 104 105 } 106 107 #endregion 108 109 #region 还原Access数据库 110 /// <summary> 111 /// 还原Access数据库 112 /// </summary> 113 /// <param name="bakPath">备份的数据库绝对路径</param> 114 /// <param name="dbPath">要还原的数据库绝对路径</param> 115 public static void RecoverAccess(string bakPath, string dbPath) 116 { 117 if (!File.Exists(bakPath)) 118 { 119 throw new Exception("备份数据库不存在,无法还原"); 120 } 121 try 122 { 123 File.Copy(bakPath, dbPath, true); 124 } 125 catch (IOException ixp) 126 { 127 throw new Exception(ixp.ToString()); 128 } 129 } 130 #endregion 131 132 /// <summary> 133 /// 数据库备份 134 /// </summary> 135 /// <param name="sender"></param> 136 /// <param name="e"></param> 137 protected void btnDBBackup_Click(object sender, EventArgs e) 138 { 139 string dbPath = "E:\\RocLeft.mdb";//数据库文件路径 140 string backupPath ="G:\\RocLeft"+DateTime.Now.ToString("yyMMddHms")+".bak";//数据库备份到的路径 141 142 string time=DateTime.Now.ToString(); 143 try 144 { 145 Backup(dbPath, backupPath); 146 CompactAccess(backupPath);//压缩Access数据库 147 lblRes.Text += time + " " + dbPath + "成功备份到-->" + backupPath + "<br/>"; 148 } 149 catch (Exception ex) 150 { 151 lblRes.Text += time + " 备份失败!" + ex.Message + "<br/>"; 152 } 153 } 154 /// <summary> 155 /// 数据库恢复 156 /// </summary> 157 /// <param name="sender"></param> 158 /// <param name="e"></param> 159 protected void btnGetBack_Click(object sender, EventArgs e) 160 { 161 string dbPath = "G:\\" + this.fileUrl.FileName;//还原的数据库文件路径 162 string backupPath ="E:\\RocLeft.mdb";//还原的数据 163 164 string time=DateTime.Now.ToString(); 165 try 166 { 167 CreateAccess(backupPath);//根据指定的文件名称创建Access数据库 168 RecoverAccess(dbPath, backupPath); 169 lblRes.Text += time + " " + dbPath + "成功还原到-->" + backupPath + "<br/>"; 170 } 171 catch (Exception ex) 172 { 173 lblRes.Text += time + " 还原失败!" + ex.Message + "<br/>"; 174 } 175 } 176 }
------------------------------------------ 补充分割线 ---------------------------------------------------------
using ADOX;//该命名空间包含创建ACCESS的类(方法)--解决方案 ==> 引用 ==> 添加引用 ==> 游览找到.dll 位置在C-program files - Common Files-System-ado-msado.dllusing using JRO; 下载地址:http://www.dllzj.com/index.html
关于压缩数据库 最好在此之前检查一遍数据库是否被占用,
解决方法:http://blog.csdn.net/sx341125/article/details/39086717
http://blog.csdn.net/baple/article/details/8131717
第二个链接提到的方法:(msdn介绍见:https://msdn.microsoft.com/zh-cn/library/system.runtime.interopservices.marshal.finalreleasecomobject(v=vs.110).aspx)
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(catalog.ActiveConnection);
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(catalog);
相当于dispose();释放。
但是没有更好的解决方法。
在此记录一下,如果有人弄清楚了这个问题,麻烦留言告知。谢谢!
转载于:https://www.cnblogs.com/marvelousone/p/7464097.html
C# 压缩和修复Access数据库相关推荐
- C#压缩和修复Access数据库
介绍 下面这段C# 代码可以用来压缩和修复Access数据库,不管它是一个简单的".mdb"ACCESS数据库还是一个".mdw"网络共享数据库,这个过 ...
- Asp.net在线备份、压缩和修复Access数据库
1.问题的提出 在设计中小型Web应用程序时,可以选择Microsoft Accesss为数据库.在数据库的使用过程中经常性进行增加和删除操作.事实上,Microsoft Access并不能有效地释放 ...
- 如何修复ACCESS数据库
ACCESS数据库,使用时间超过2-3个月 或网站每日访问人数超过100个独立IP,都可能造成损坏,损坏后,用户的网站就可能会很慢,也可能导致服务器CPU一直100%,一般可以采用以下方法修复,如修复 ...
- 有关Access的压缩和修复数据库功能
用过Access数据库的朋友一定知道有个"压缩和修复数据库"的功能. 为什么要 "压缩和修复数据库" 首先是当然是压缩,减少文件大小.因为Access是一种文件 ...
- ACCESS数据库的压缩,备份,还原,下载,删除的实现
以文本方式查看主题 - 企胜MIS开发论坛|ASP.NET|UML| CSS|Access|My SQL|网络营销|JAVA|J2EE|Ajax (http://www.fleake.com/in ...
- 巨人Access数据库压缩器官方版
名称:巨人Access数据库压缩器官方版 版本:1.0 软件大小:767KB 软件语言:简体中文 软件授权:免费版 应用平台:Win7/Win2003/Vista/ Win2000/WinXP 软件介 ...
- 长期使用中型Access数据库的一点经验
Access数据库在用的过程中, 经常不断的进行删除和增加记录的操作,会出现以下问题: 1. 可能会使Update语句更新失败, 明明一条记录存在, 也可以select到,但在用Update时出现找不 ...
- 【原创】ASP.NET C# 对SQL/ACCESS 数据库的备份和还原函数
//注意:本文为博主原创,转载请注明出处,谢谢合作! //使用前须先引用SQLDMO.dll ADOX.dll JRO.dll 等组件,无须独立安装 //如:C:\Program Files\Comm ...
- DELPHI中操作ACCESS数据库
DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库) 以下代码在WIN2K,D6,MDAC2.6下测试通过, 编译好的程序在WIN98第二版无ACCESS环境下运行成功. //在之前u ...
- 转:关于ASP操作Access数据库时出现死锁.ldb的解决方法
Asp操作Access数据库时出现死锁.ldb导致网站访问缓慢的问题描述 最近asp网站出现数据库错误,在ftp登陆后发现原来的后缀MDB文件多了一个后缀LDB文件,是自动被锁,在一天某个时间段内打不 ...
最新文章
- ML之多分类预测之PLiR:使用PLiR实现对六类label数据集进行多分类
- android 过滤cmcc,Android 无法通过cmcc wap2.0 test解决
- 代理服务器ip地址如何获得_详细教程:如何使用代理服务器进行网页抓取?
- BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)
- Java代码有效和片段有效_Java 9 尝鲜之交互式编程环境
- 【MyBatis笔记】13-一对多左连接查询分步查询(查询所有客户及客户对应的订单)
- TensorFlow推出命令式、可定义的运行接口Eager Execution
- python是什么语言-python是一门什么样的语言?
- stm32呼吸灯c语言程序,STM32 呼吸灯程序请教
- Nessus部署及简单使用
- 淮阴工学院计算机硕士生导师,硕士生导师概况
- 学习Vue3 第二十七章(自定义指令directive)
- PHP多进程 - opcode缓存与用户缓存(APC, XCache, eAcclerator,Zend Opcache,Yac)
- 分不清?企业征信报告Or企业信用评级报告,差别大了去了!
- 会声会影2023中文旗舰版新增功能讲解及下载更新教程
- 完整的系统帮助类Utils
- JAVA打印月历(以2017年为例)
- android studio 排除,Android Studio从构建中排除类?
- 1112关于AS3.0中继承APPC的无法去除标题栏的解决方法
- Rendering Engine 主流的浏览器内核(排版引擎、渲染引擎、解释引擎)有哪几种,分别的特点...
热门文章
- 四川2021年高考成绩位次查询,2021年填报志愿数据:四川所有本科大学近三年分数线、对应位次排行榜...
- 什么app可以绘制路线图_为什么大多数路线图都会不可避免地带来糟糕的结果
- ios苹果开发者账号申请流程(公司类型)
- 七大热门小程序框架横评,谁是性能之王
- html - 空格符号 - 字符实体 - 预留字
- 聚石塔,云鼎,多多云-----有一种坑叫盲打
- WINDOWS系统进程查询
- 四叶草python_标签:python - 四叶草
- Xcode 8 size class
- 在移动硬盘内安装centos7记录