如何从 C# 程序修改 MS Access 数据库属性集合(不是数据!
本文关键字:集合 数据 属性 数据库 程序修改 Access MS | 更新日期: 2023-09-27 18:32:58
在
Visual Studio 2010中从C#访问Database
Microsoft对象属性(如CurrentDb.Properties
(的最佳方法是什么?
(不是必需的:事实上,我想"按需"摆脱几十个数据库中的复制。复制已经有几年没有使用了,在 2013 年之前,MS Access 还可以。Access 2013 拒绝具有此功能的数据库。
您可以使用 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 属性原来是(