如何从C#程序修改MS Access数据库的属性集合(没有数据!)?(How to modify M

2019-10-18 17:14发布

什么是访问Microsoft Access的最佳途径Database对象的属性 (如在CurrentDb.Properties从C#在Visual Studio 2010)?

(不是必需的。其实我是想在“按需”几十个数据库摆脱复制的复制是不使用了几年,并于2013年访问2013拒绝与数据库,这是确定的MS Access之前特征。)

Answer 1:

可以遍历并通过修改Access数据库的属性访问DAO对象库 。

过在数据库中的属性以下代码遍历以及在不同的容器和它的属性,以及在所述文档和它的数据库中的容器的性质。 输出被写入到调试输出窗口。

之后,我选了一个Property ,从不同的属性集合和改变它的价值。 请注意,使用上集合索引将抛出一个异常,如果该属性不存在。

请确保您有用于Microsoft Office 12.0 Access数据库引擎对象库 (您的版本migth而不同)主Interop大会的参考,让你可以在你使用的语句如下:

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);
    }
}

我用这克服了异常的动态类型被抛出(作为值属性原来是)



文章来源: How to modify MS Access database Properties collection (not data!) from a C# program?