如何从 C# 程序修改 MS Access 数据库属性集合(不是数据!

本文关键字:集合 数据 属性 数据库 程序修改 Access MS | 更新日期: 2023-09-27 18:32:58

Visual Studio 2010中从C#访问Database Microsoft对象属性(如CurrentDb.Properties(的最佳方法是什么?

(不是必需的:事实上,我想"按需"摆脱几十个数据库中的复制。复制已经有几年没有使用了,在 2013 年之前,MS Access 还可以。Access 2013 拒绝具有此功能的数据库。

如何从 C# 程序修改 MS Access 数据库属性集合(不是数据!

您可以使用 Access

DAO 对象库循环访问和修改 Access 数据库中的属性。

下面的代码循环访问数据库中的属性以及不同的容器及其属性,以及数据库容器中的文档及其属性。输出将写入"调试输出"窗口。

之后,我从不同的属性集合中选择一个Property并更改其值。请注意,如果属性不存在,则在集合上使用索引器将引发异常。

确保您具有对 Office 12.0 Access 数据库引擎对象库的主互操作程序集Microsoft引用(您的版本可能会有所不同(,以便您可以在 using 语句中包含以下内容:

using Microsoft.Office.Interop.Access.Dao;

您的方法如下:

    // Open a database
    var dbe = new DBEngine();
    var db = dbe.OpenDatabase(@"C:'full'path'to'your'db'scratch.accdb");
    // Show database properties
    DumpProperties(db.Properties);
    // show all containers
    foreach (Container c in db.Containers)
    {
        Debug.WriteLine("{0}:{1}", c.Name, c.Owner);
        DumpProperties(c.Properties);
    }
    //Show documents and properties for a specific container
    foreach (Document d in db.Containers["Databases"].Documents)
    {
        Debug.WriteLine("--------- " + d.Name);
        DumpProperties(d.Properties);
    }
    // set a property on the Database
    Property prop = db.
        Properties["NavPane Width"];
    prop.Value = 300;
    // set a property on the UserDefined document
    Property userdefProp = db
        .Containers["Databases"]
        .Documents["UserDefined"]
        .Properties["ReplicateProject"];
    userdefProp.Value = true;

属性转储程序助手

private static void DumpProperties(Properties props)
{
    foreach (Property p in props)
    {
        object val = null;
        try
        {
            val = (object)p.Value;
        }
        catch (Exception e)
        {
            val = e.Message;
        }
        Debug.WriteLine(
            "{0} ({2}) = {1}", 
            p.Name, 
            val, 
            (DataTypeEnum) p.Type);
    }
}

我用它来克服动态类型上引发的异常(因为 Value 属性原来是(