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日

相关文章

  • 详解C#中SqlParameter的作用与用法

    详解C#中SqlParameter的作用与用法 在C#中,SqlParameter是用于向SQL Server数据库发送参数化查询的类。它可以帮助我们避免SQL注入攻击,并提高查询性能。本文将提供详细的“详解C#中SqlParameter的作用与用法”的完整攻略,包括SqlParameter的作用、SqlParameter的用法以及两个示例。 SqlPara…

    C# 2023年5月15日
    00
  • 带着问题读CLR via C#(笔记二)类型基础

    首先,你需要明确CLRviaC#是一本深入CLR和C#的书籍,针对读者提出了一系列问题,通过深入讲解各种类型的基础知识来解答这些问题。因此,想要完整掌握CLRviaC#,需要掌握以下几个步骤: 1. 阅读笔记前先阅读CLRviaC#原著 CLRviaC#是一本非常优秀的书籍,但它也是非常深入的一本书籍。为了能够真正理解笔记,你需要先阅读原著,并掌握其中的主要…

    C# 2023年5月15日
    00
  • asp.net 特定目录form验证

    ASP.NET 中的表单验证通常用于检验用户提交的数据是否满足特定的要求,如必填项、数据格式验证等。特定目录中的表单验证则是指对某个特定目录中的提交的表单数据进行验证。 下面是在 ASP.NET 中实现特定目录表单验证的攻略: 1. 创建 ASP.NET 应用程序 首先要创建一个 ASP.NET 应用程序,可以使用 Visual Studio 或其他 .NE…

    C# 2023年5月31日
    00
  • ASP.NET Core MVC 从入门到精通之wwwroot和客户端库

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步了解ASP.NET Core MVC项目创建,启…

    C# 2023年4月25日
    00
  • 深入多线程之:Reader与Write Locks(读写锁)的使用详解

    《深入多线程之:Reader与Write Locks(读写锁)的使用详解》是一篇介绍Java并发编程中读写锁的文章。文章深入浅出地介绍了读写锁的基本概念、原理、使用场景及使用方式,并附有具体的示例说明。下面我将详细介绍本文的主要内容。 1. 什么是读写锁 读写锁是一种特殊的锁,它与常规的互斥锁不同,读写锁允许多个线程同时读共享变量,但对该共享变量进行写操作时…

    C# 2023年6月3日
    00
  • WinFrom中label背景透明的实现方法

    下面是详细讲解WinForm中label背景透明的实现方法的完整攻略: 1. 实现背景透明 我们可以使用以下步骤实现label的背景透明: 步骤一:设置Label的Color属性为Transparent 在窗体中,选中Label控件,找到Color属性,将其设置为Transparent。这样,我们就能看到底下窗体的背景了。 步骤二:在Label的Paint事…

    C# 2023年6月7日
    00
  • C#实现在网页中根据url截图并输出到网页的方法

    下面就来详细讲解如何使用C#实现在网页中根据URL截图并输出到网页的方法。 步骤一:安装NuGet包 首先,我们需要在Visual Studio中安装一个名为“Selenium.WebDriver”的NuGet包。这个包提供了许多操作浏览器窗口的功能,可以用来实现我们的目标。 步骤二:编写代码 接下来,我们需要编写代码来实现在网页中根据URL截图并输出到网页…

    C# 2023年6月7日
    00
  • C#实现简易的计算器

    C#实现简易的计算器可以分为以下步骤: 1. 创建C#控制台应用程序 首先,在Visual Studio中创建一个新的C#控制台应用程序,为其命名并设置相关参数。创建完成后,我们就可以开始编写代码了。 2. 实现基本的四则运算功能 创建一个类来实现计算器。该类应该包含加、减、乘、除四种运算方法。例如: class Calculator { public do…

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