用C#压缩和修复Access数据库(译)

access|数据|数据库|压缩

介绍

       下面这段C# 代码可以用来压缩和修复Access数据库,不管它是一个简单的".mdb"还是一个".mdw"网络共享数据库,这个过程和你在用MS Access应用程序中使用的"工具-数据库实用工具-压缩和修复"时执行的操作完全一样.实例代码使用了"迟绑定"(运行中在内存中建立COM对象),这样就不需要在工程中加入COM引用了,也不需要在PC上安装MS Access应用程序.只需要一个Jet引擎(Jet引擎包含在MDAC安装包中,在Windows NT4以后的版本中,系统已经自带了这个引擎).

背景

        不知你是否也厌烦了在工程中加入复杂的COM库引用,但我相信这个纯.NET代码将省去额外的交互操作, RCWs和COM引用.基本上,由于系统中安装的Microsoft类库的不同(例如:MS Office Object Library 9,10,11等等),我们也不知道用户PC中安装的Office版本,所以我们要通过ProgID来访问COM对象,而不能用CLSID.例如,当调用"Excel.Application",时,得到的是Excel,而不管系统中安装MS Office的版本,当在代码中加入"MS Excel 10 Object library"引用时,其实只是给应用程序加入了一个非常受限制的功能.所以我们使用System.Reflection和迟绑定.

1. 实例代码

只需调用CompactAccessDB函数即可压缩和修复目标数据库.

2. 参数:

  • connectionString – 用来连接到Access数据库.
  • mdwfilename –要压缩的MDB文件的全名(路径+文件名).

由于Jet引擎的限制,执行此方法压缩Access数据库会把结果生成为一个新文件,所以我们要还需要把这个新的Access文件拷贝到目的位置覆盖原来未压缩文件.

当调用此方法时请确认被压缩数据库无打开的连接.

代码如下:


/// <summary>

/// MBD compact method (c) 2004 Alexander Youmashev

/// !!IMPORTANT!!

/// !make sure there's no open connections

///    to your db before calling this method!

/// !!IMPORTANT!!

/// </summary>

/// <param name="connectionString">connection string to your db</param>

/// <param name="mdwfilename">FULL name

///     of an MDB file you want to compress.</param>

public static void CompactAccessDB(string connectionString, string mdwfilename)

{

    object[] oParams;

 

    //create an inctance of a Jet Replication Object

    object objJRO =

      Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"));

 

    //filling Parameters array

    //cnahge "Jet OLEDB:Engine Type=5" to an appropriate value

    // or leave it as is if you db is JET4X format (access 2000,2002)

    //(yes, jetengine5 is for JET4X, no misprint here)

    oParams = new object[] {

        connectionString,

        "Provider=Microsoft.Jet.OLEDB.4.0;Data" +

        " Source=C:\\tempdb.mdb;Jet OLEDB:Engine Type=5"};

 

    //invoke a CompactDatabase method of a JRO object

    //pass Parameters array

    objJRO.GetType().InvokeMember("CompactDatabase",

        System.Reflection.BindingFlags.InvokeMethod,

        null,

        objJRO,

        oParams);

 

    //database is compacted now

    //to a new file C:\\tempdb.mdw

    //let's copy it over an old one and delete it

 

    System.IO.File.Delete(mdwfilename);

    System.IO.File.Move("C:\\tempdb.mdb", mdwfilename);

 

    //clean up (just in case)

    System.Runtime.InteropServices.Marshal.ReleaseComObject(objJRO);

    objJRO=null;

}

注意事项

Jet Engine 5 用于 JET4X 数据库. 使用时要留意下表:

Jet OLEDB:Engine Type

Jet x.x Format MDB Files

1

JET10

2

JET11

3

JET2X

4

JET3X

5

JET4X

原文链接:   http://www.codeproject.com/cs/database/mdbcompact_latebind.asp

时间: 2024-09-19 09:19:35

用C#压缩和修复Access数据库(译)的相关文章

用C#压缩和修复Access数据库

介绍 下面这段C# 代码可以用来压缩和修复Access数据库,不管它是一个简单的".mdb"ACCESS数据库还是一个".mdw"网络共享数据库,这个过程和你在用MS Access应用程序中使用的"工具-数据库实用工具-压缩和修复"时执行的操作完全一样.实例代码使用了"迟绑定"(运行中在内存中建立COM对象),这样就不需要在工程中加入COM引用了,也不需要在PC上安装MS Access应用程序.只需要一个Jet引擎(Jet引擎

Asp.net在线备份、压缩和修复Access数据库示例代码

这篇文章主要介绍了Asp.net如何在线备份.压缩和修复Access数据库,需要的朋友可以参考下 1.问题的提出    在设计中小型Web应用程序时,可以选择Microsoft Accesss为数据库.在数据库的使用过程中经常性进行增加和删除操作.事实上,Microsoft Access并不能有效地释放已分配的但被删除的对象空间,这将意味着即使你删除了一个对象,而这个对象仍然占据着数据库的空间,使得数据库越来越大.不但占用不必要的空间,而且降低了数据库的效率.特别在虚拟站点上的问题尤为突出.因此

Asp.net在线备份、压缩和修复Access数据库示例代码_实用技巧

1.问题的提出 在设计中小型Web应用程序时,可以选择Microsoft Accesss为数据库.在数据库的使用过程中经常性进行增加和删除操作.事实上,Microsoft Access并不能有效地释放已分配的但被删除的对象空间,这将意味着即使你删除了一个对象,而这个对象仍然占据着数据库的空间,使得数据库越来越大.不但占用不必要的空间,而且降低了数据库的效率.特别在虚拟站点上的问题尤为突出.因此对Access数据库进行压缩瘦身很有实际意义. 虽然Access数据库自身具有"压缩和修复数据库&quo

压缩并修复Access数据库(推荐)

Compact and Repair You can use the "Compact and Repair" function in Access from ASP code. The following code is an example of how this can be done. Note that when you decide to "Compact and Repair" your Access database, some autonumber

几种修复ACCESS数据库的实用方法

修复Access数据库,我们一般使用微软Office 97中带的Access 97对数据库进行修复和整理.Access数据库被损坏分以下几种情况:1.严重损坏:2.轻度损坏:3.有些表被损坏或有些表的部分记录被损坏.下面就分情况介绍解决办法. 1.使用Access97打不开数据库.系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的.损害严重的数据库一般来说都是无法修复的,只有恢复备份了,好在这种情况比较少见. 2.如果数据库损

Access数据库的压缩与修复图解教程

Access数据库长时间使用后容易出现数据库过大.数据库损坏等现像,微软的Office软件中Access是带有修复和压缩功能的,具体操作共分为二步方法如下: 1.打开您的.mdb数据库 2.点击上方菜单栏中的工具-->数据库实用工具-->点击压缩和修复数据库即可   压缩和修复Access数据库操作起来比较容易,在操作前您本地电脑上需要安装Office软件中的Access软件.

Access数据库的压缩与修复

Access数据库长时间使用后容易出现数据库过大.数据库损坏等现像,微软的Office软件中Access是带有修复和压缩功能的,具体操作共分为二步方法如下: 1.打开您的.mdb数据库 2.点击上方菜单栏中的工具-->数据库实用工具-->点击压缩和修复数据库即可 压缩和修复Access数据库操作起来比较容易,在操作前您本地电脑上需要安装Office软件中的Access软件.

Access数据库日常维护方法(优化)_Access

本文适用范围:使用Access作为数据库建设的网站. Access数据库的安全性 1.确保Access数据库不能直接下载,也就是通过http方式无法直接下载您的数据库.如果可以下载,会被黑客利用,盗取您网站上的全部资料. 2.把Access数据库重命名成一个比较复杂的名字,不要使用默认的mdb扩展名,也不要使用asp作为扩展名.建议不用扩展名或使用一个特殊的扩展名,比如kjje4#55.aaa. 数据库大小请勿超过50M 1.经实践总结,当Access数据库超过50M时,网站的整体响应会变得非常

Access数据库被损坏的修复方法

Access数据库被损坏主要分为以下几种情况:1.严重损坏:2.轻度损坏:3.有些表被损坏或有些表的部分记录被损坏.下面就分情况介绍解决办法. Access数据库被损坏主要分为以下几种情况:1.严重损坏:2.轻度损坏:3.有些表被损坏或有些表的部分记录被损坏.下面就分情况介绍解决办法. 1.使用Access97打不开数据库.系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的.损害严重的数据库一般来说都是无法修复的,只有恢复备份