C#中使用晚绑定实现压缩Access数据库

C#中使用晚绑定实现压缩Access数据库.
VB对Com后期绑定支持得很好,在C#中可以使用反射来实现.

函数实现代码如下:

 1 public static void CompactAccessDB(string strMdbName)
 2 {
 3     string TempMdbName = Application.StartupPath + @"\Temp.mdb";
 4 
 5     //创建 Jet 引擎对象
 6     object objJetEngine = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"));
 7 
 8     //设置参数数组
 9     //根据你所使用的Access版本修改 "Jet OLEDB:Engine Type=5" 中的数字.
10     //5 对应 JET4X 格式 (access 2000,2002)
11 
12     object[] objParams = new object[] {
13         String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}",strMdbName), //输入连接字符串
14         String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5",TempMdbName) //输出连接字符串
15         };
16 
17     //通过反射调用 CompactDatabase 方法
18     objJetEngine.GetType().InvokeMember("CompactDatabase",
19             System.Reflection.BindingFlags.InvokeMethod,
20             null,
21             objJetEngine,
22             objParams);
23 
24     //删除原数据库文件
25     System.IO.File.Delete(strMdbName);
26     //重命名压缩后的数据库文件
27     System.IO.File.Move(TempMdbName, strMdbName);
28     //释放Com组件
29     System.Runtime.InteropServices.Marshal.ReleaseComObject(objJetEngine);
30     objJetEngine = null;
31 }

为什么要使用晚绑定呢?可以直接在项目中添加对 JRO.JetEngine 组件的引用来实现的.

在多人协作的开发环境中,添加引用需要签出项目文件进行修改.如果有组员机器上没有这个组件,她就会无法编译改动后程序.

这种方式就很方便,复制过去就能用.不需要对项目进行修改.

虽然晚绑定有小小性能损失,换来的方便性还是划算的. 而且也不是经常会用到这个功能.

对于有密码的access文件怎么处理呢?
很简单的,就是在输入连接字符串中增加密码的设置即可.

这样默认压缩后的mdb就没有密码,如果希望压缩后的mdb也有密码,就在输出的连接字符串里面增加密码设置即可.

这个方法其实也可以用来修改mdb的密码,取消mdb密码,给mdb设置密码.

时间: 2024-09-24 09:55:05

C#中使用晚绑定实现压缩Access数据库的相关文章

在VB中压缩ACCESS数据库

如果您在Access数据库.Access项目中删除数据或对象,可能会产生碎片并导致磁盘空间使用效率的降低.同时,数据库文件的大小并未减小,而是不断的增大,直至您的硬盘没有空间.有没有好的处理方法呢?其实,在Access中可以对数据库进行压缩优化以提升Access数据库和Access项目的性能,这样的压缩处理的实质是复制该文件,并重新组织文件在磁盘上的存储方式.但是,在Access项目中进行这样的压缩不会影响到数据库对象(例如表或视图),因为它们是存储在Microsoft SQL Server数据

程序: 创建、压缩Access数据库并修改密码演示

access|程序|创建|数据|数据库|压缩 * --------------------------------------------* 程序: 创建.压缩Access数据库并修改密码演示* 设计: 红雨* --------------------------------------------Local lcMdbFile, lcRetuStrlcMdbFile = [C:\Temp\TestCreaMdbFile.mdb]lcPswd1 = [test1]lcPswd2 = [test2

在JSP中访问Oracle ,SqlServer ,DB2, Informix ,Access 数据库

access|js|oracle|server|sqlserver|访问|数据|数据库 在JSP中访问Oracle ,SqlServer ,DB2, Informix ,Access 数据库现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到一定程度的时候,可以考虑用MVC的模式开发.在练习这些代码的时候,你一定将jdbc的驱动程序放到服务器的类

IIS中利用重定向URL来防止Access数据库被下载的方法

对于ASP+Access开发的网站,安全性最最让人担忧的就是Access数据库可以随意下载,当然我们可以通过一些修改数据库名称的手段进行尽量的防护,但归根结底是不彻底的.所以今天就来谈谈在IIS中利用重定向URL来防止Access数据库被下载的方法. 此方法需要你有IIS的管理权限,如果你使用的是虚拟主机,那估计没有办法了,呵呵.这里假设你有IIS的管理权限. 1.首先打开Internet 信息服务(IIS)管理器,在Internet 信息服务(IIS)管理器左边窗口中找到你数据库所在的文件夹,

Excel中的数据如何导入到Access数据库中?

  现在大多数人记录数据都是用excel,但是一些程序员需要将Excel中的数据导入Access数据库中,编写一个另外的程序,但是对于初学者来说这还是挺艰难的,那么现在我就为大家讲解如何将Excel中的数据导入到Access数据库中. 找到自己需要做改变的Excel和Access 为了避免自己以后的,所以第一个步骤看似无关重要,但是却缺一不可.确保Excel中的数据导入数据库不要出错,不然一切白费. 新建数据库,开始执行操作 在数据库上方有一个外部数据,点击外部数据存在一个"导入Excel表格功

请问,如何使用C#中的gridcontrol控件对数据库内容进行修改后保存,我绑定的是access数据库。谢谢

问题描述 谢谢各位 解决方案 解决方案二:http://blog.csdn.net/machong8183/article/details/5488191解决方案三:用过DataGridView没有,两种实现过程完全一致,都是通过DataTable+SqlDataAdapter进行数据更新!这方面msdn上面有详细例子...解决方案四:对数据库修改使用的是ADO.NET,gridcontrol只是用于显示.stringstrCon=System.Web.Configuration.WebConf

介绍一个用ASP来压缩ACCESS数据库的例子

access|数据|数据库|压缩 <%      oldDB = "d:\net\accessTest.mdb"     bakDB = "d:\net\accessTestBack.mdb"     newDB = "d:\net\accessCompact.mdb"     Set FSO = Server.CreateObject("Scripting.FileSystemObject")     ' back u

在线压缩Access数据库

access|数据|数据库|压缩|在线 While working on BuildDB/Buildapp online Demo, I developed a little function that will compact Access databases over the web. Here's a "no-frills" page that'll compact the databases for you. One problem with Access databases

用C++代码建立和压缩ACCESS数据库文件

ACCESS的数据库引擎MS JET 4.0是目前应用很广的小型数据库引擎,它具有使用简单,费用低廉(基本上是免费),对机器的配置要求低和对操作者的技术要求低等特点.在使用MS JET的时候如果我们的程序能够自动建立和维护所用的*.MDB文件,那么我们的小程序将会显得更专业.下面简单介绍一下如何动态建立*.MDB文件和压缩*.MDB文件的操作,以下代码都是基于ADO数据编程. 1) 动态建立*.MDB文件. #include <adoint.h> #include <adoctint.h