C#使用晚绑定来实现压缩Access数据库的方法

C#使用晚绑定来实现压缩Access数据库的方法

简介

Access数据库是一种非常常见的数据库,在我们使用过程中,经常会遇到需要压缩或者清理数据库的情况。通过C#语言来实现压缩Access数据库是一种非常方便的方法。这里主要通过晚绑定的方式来实现。

晚绑定

晚绑定,全称为Late Binding,是在运行时动态绑定对象。换句话说,就是在编译时不需要明确定义要使用哪一个类,而是在运行时通过反射来确定要使用哪个类。

实现步骤

第一步:添加引用

在项目中添加Microsoft.Office.Interop.Access.Dao引用。

第二步:创建应用程序

定义应用程序变量,程序类型为Object,该类型是用于晚绑定使用的。

object oApp;

第三步:获取Access数据库对象

获取Access数据库对象,以便后面的操作。

oApp = Activator.CreateInstance(Type.GetTypeFromProgID("Access.Application"));  //创建Access应用程序

第四步:打开数据库

打开需要压缩的数据库。

oApp.GetType().InvokeMember("OpenCurrentDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[2] { strAccessFilePath, true });

第五步:执行压缩操作

执行压缩操作前,需要判断Access版本号,然后针对版本号执行不同的操作。

获取Access数据库版本号。

string strVersion = oApp.GetType().InvokeMember("Version", System.Reflection.BindingFlags.GetProperty, null, oApp, null).ToString();

根据版本号执行不同的操作。

if (strVersion.StartsWith("12"))  //Access 2007
{
    oApp.GetType().InvokeMember("CompactRepair", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[3] { strAccessFilePath, strCompactAccessFilePath, true });
}
else if (strVersion.StartsWith("14"))  //Access 2010
{
    oApp.GetType().InvokeMember("CompactRepair", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[3] { strAccessFilePath, strCompactAccessFilePath, true });
}
else if (strVersion.StartsWith("15"))  //Access 2013
{
    oApp.GetType().InvokeMember("CompactRepair", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[4] { strAccessFilePath, strCompactAccessFilePath, true, true });
}
else if (strVersion.StartsWith("16"))  //Access 2016/2019
{
    oApp.GetType().InvokeMember("CompactRepair", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[4] { strAccessFilePath, strCompactAccessFilePath, true, true });
}

第六步:关闭数据库

关闭数据库,释放资源。

oApp.GetType().InvokeMember("CloseCurrentDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oApp, null);
oApp.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, oApp, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);
oApp = null;

示例说明

示例一:Access 2007数据库的压缩

object oApp;
oApp = Activator.CreateInstance(Type.GetTypeFromProgID("Access.Application"));  //创建Access应用程序
string strAccessFilePath = @"C:\Access2007.mdb";
string strCompactAccessFilePath = @"C:\Access2007_Compact.mdb";
oApp.GetType().InvokeMember("OpenCurrentDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[2] { strAccessFilePath, true });
string strVersion = oApp.GetType().InvokeMember("Version", System.Reflection.BindingFlags.GetProperty, null, oApp, null).ToString();
if (strVersion.StartsWith("12"))  //Access 2007
{
    oApp.GetType().InvokeMember("CompactRepair", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[3] { strAccessFilePath, strCompactAccessFilePath, true });
}
oApp.GetType().InvokeMember("CloseCurrentDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oApp, null);
oApp.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, oApp, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);
oApp = null;

示例二:Access 2013数据库的压缩

object oApp;
oApp = Activator.CreateInstance(Type.GetTypeFromProgID("Access.Application"));  //创建Access应用程序
string strAccessFilePath = @"C:\Access2013.accdb";
string strCompactAccessFilePath = @"C:\Access2013_Compact.accdb";
oApp.GetType().InvokeMember("OpenCurrentDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[2] { strAccessFilePath, true });
string strVersion = oApp.GetType().InvokeMember("Version", System.Reflection.BindingFlags.GetProperty, null, oApp, null).ToString();
if (strVersion.StartsWith("15"))  //Access 2013
{
    oApp.GetType().InvokeMember("CompactRepair", System.Reflection.BindingFlags.InvokeMethod, null, oApp, new Object[4] { strAccessFilePath, strCompactAccessFilePath, true, true });
}
oApp.GetType().InvokeMember("CloseCurrentDatabase", System.Reflection.BindingFlags.InvokeMethod, null, oApp, null);
oApp.GetType().InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, oApp, null);
System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);
oApp = null;

总结

通过晚绑定的方式来实现Access数据库的压缩是一种非常方便的方法。在进行实现前需要注意Access的版本号,在压缩过程中针对不同的版本号执行不同的操作。同时,在压缩操作完毕后,需要关闭数据库,并释放资源,以防止资源占用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用晚绑定来实现压缩Access数据库的方法 - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • ASP.NET Core按用户等级授权的方法

    以下是关于“ASP.NET Core 按用户等级授权的方法”的完整攻略: 1. ASP.NET Core 授权 ASP.NET Core 授权是一种用于限用户访问应用程序中某些资源的机制。通过授权,我们限制用户访问某些页面、API 或其他资源,以保护应用的安全性和完整性。 2. ASP.NET Core 按等级授权 ASP.NET Core 按用户等级授权是…

    C# 2023年5月12日
    00
  • .NET使用DinkToPdf将HTML转成PDF的示例代码

    让我来给您详细讲解下“.NET使用DinkToPdf将HTML转成PDF的示例代码”的攻略吧。 什么是DinkToPdf DinkToPdf是一个开源的跨平台库,可以将HTML转换为PDF文档。它使用WKHtmlToPdf底层转换引擎,支持Windows,Linux和MacOS。 安装DinkToPdf 要使用DinkToPdf,您需要将它作为NuGet包添…

    C# 2023年6月3日
    00
  • Python调用.NET库的方法步骤

    当我们使用Python编程时,有时需要从.NET库里调用一些方法。那么,下面是我总结的Python调用.NET库的方法步骤: 安装pythonnet库 要使用Python调用.NET库,首先需要安装一个名叫pythonnet的Python库。你可以使用pip安装该库,命令如下: pip install pythonnet 导入.NET dll并创建实例 在P…

    C# 2023年6月3日
    00
  • asp.net 读取并修改config文件实现代码

    ASP.NET 是一个非常受欢迎的 Web 应用程序开发框架,其配置文件 config 文件是应用程序的核心之一,配置文件存储了应用程序运行所需的信息。我们可以通过读取和修改 config 文件来完成应用程序的配置。在本文中,我将详细讲解如何通过 ASP.NET 读取并修改 config 文件的方法。 准备工作 首先,我们需要准备好目标 config 文件。…

    C# 2023年5月31日
    00
  • C#使用foreach语句简单遍历数组的方法

    C#的foreach语句是一种简单遍历数组的方法,可以快速方便地遍历数组中的元素。下面我们来详细讲解如何使用foreach语句进行数组遍历: 1.基本语法 foreach语句的基本语法如下: foreach (var item in array) { // 遍历的操作 } 其中var item是用来表示遍历到的数组元素的变量名,array则是需要遍历的数组名…

    C# 2023年6月7日
    00
  • C#中的图像Image类与打印Printing类用法

    C#中的图像Image类与打印Printing类用法攻略 概述 在C#中,Image类和Printing类都是常用的操作图像和打印的类,它们提供了丰富的方法和属性,可以方便地实现各种图像的处理和打印。 Image类:Image类是用于操作图像的类,可以将图像加载到内存中、进行绘制、剪切等操作。 Printing类:Printing类是用于打印的类,可以控制打…

    C# 2023年6月8日
    00
  • c# 获取照片的经纬度和时间的示例代码

    要获取照片的经纬度和时间,我们可以使用C#语言中的ExifLib库来实现。下面我将为大家详细讲解如何使用ExifLib库来获取照片的经纬度和时间。 准备工作 在使用ExifLib库之前,需要先添加对该库的引用。可以通过NuGet包管理器来添加引用。具体步骤如下: 在Visual Studio中打开你的项目。 在“解决方案资源管理器”窗口中右击项目名称,选择“…

    C# 2023年6月1日
    00
  • c#中抽象类和接口的详细介绍

    关于”C#中抽象类和接口的详细介绍”,我可以提供以下内容: 抽象类 抽象类是指包含抽象成员(抽象方法、属性、索引器或事件)的类。抽象类本身不能被实例化,而是用作其他非抽象类的基类。一个派生类必须实现从其抽象基类继承的所有抽象成员,否则,该派生类本身也必须被声明为抽象类。 定义抽象类 抽象类可以使用abstract关键字定义,如下所示: public abst…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部