欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > 服务器教程 >

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

发表于2019-04-21 17:07| 次阅读| 来源网络整理| 作者session

摘要:用C#紧缩和修复Access数据库
用C#紧缩和修复Access数据库

  引见

  下面这段C# 代码可能用来紧缩和修复Access数据库,不管它是一个简略的".mdb"ACCESS数据库还是一个".mdw"网络共享数据库,这个过程和你在用MS Access运用程序中利用的"工具-数据库适用工具-紧缩和修复"时执行的操作齐全一样.实例代码利用了"迟绑定"(运转中在内存中建设COM对象),这样就不需求在工程中退出COM引用了,也不需求在PC上装置MS Access运用程序.只有要一个Jet引擎(Jet引擎蕴含在MDAC装置包中,在Windows NT4当前的版本中,系统已经自带了这个引擎).

  C#操作ACCESS数据库的背景

  不知你能否也厌烦了在工程中退出简单的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文件拷贝到目标地位笼罩原来未紧缩文件.

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

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

  /// !!IMPORTANT!!

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

  /// to your db before calling this method!

  /// !!IMPORTANT!!

  ///

  ///

  connection string to your db

  /**////

  FULL name

  /**//// of an MDB file you want to compress.

  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;

  }