如何获取特定版本的MS Access或/和每个MS Access版本的所有数据类型?

时间:2009-07-23 15:31:13

标签: c# database ms-access version-control types

我正在尝试在C#程序的组合框中列出Microsoft Access 2000-2007中的数据类型(取决于MS Access数据库版本)。我希望我的程序能够打开MS Access 2000-2007数据库。如果我打开MS Access 2003,我希望我的程序能够使用特定于MS Access 2003的任何数据的数据类型,并在组合框中列出这些数据类型。如果我打开MS Access 2007数据库,它将用于MS Access 2007的任何数据的数据类型...我想知道我是否可以使用ACEDAO(ACEDAO仅兼容MS Access 2007?)。另外,如何获取特定版本的MS Access或/和每个版本的MS Access(在我的情况下为2000-2007)的所有数据类型?

2 个答案:

答案 0 :(得分:1)

ACEDAO向后兼容所有以前版本的Jet。但是兼容性以不同的方式提供。例如,如果直接查看ACEDAO的对象模型,您将看到Field数据类型和Field2数据类型。在Access 2007中,您没有看到。我猜测,Field数据类型适用于MDB(Jet 4及更早版本),Field2数据类型适用于ACCDB,因为ACCDB具有新数据类型,这些数据类型具有早期字段类型中缺少的属性和方法。

例如,Field2数据类型具有AppendOnly属性,该属性用于仅附加备注字段,即ACE中的新功能。另一个新属性是IsComplex,我猜它是支持新的多值数据类型。还有我不认识的LoadFromFile和SaveToFile方法。

现在,这只是DAO库中的一个对象,根据您使用的文件格式存在差异。我没有寻找其他类似的变化,但它们可能就在那里。

所以,你仍然需要知道适用于不同版本的内容,即使ACEDAO会为你提供一个能够在所有旧版本上运行的超集。如果您只需要使用ACCDB和Jet 4 MDB,我认为ACEDAO就足够了。

但是,我只是根据我的理解猜测你想做什么。

答案 1 :(得分:1)

据我所知,ACEDAO版本的DataTypeEnum列出了所有可用的数据类型(尽管你必须寻找dbMemo的变体,以便能够区分超链接,如果你认为这是一个不同的数据类型。

但是,它还列出了它似乎不支持的其他类型:dbfloat(21)与dbDouble不同(7); dbTime(22)与dbDate(8)不同; dbNumeric(19)与dbDouble(20)不同; dbVarBinarydbBinarydbLongBinary的不同类型。

另外,我不认为可以在运行时查询特定版本的引擎来枚举数据类型支持。

因此,我不认为简单地列出ACEDAO枚举中的类型将非常有用。相反,我认为您需要事先知道每个版本的引擎支持的数据类型,然后在运行时选择适当的集合。

Jet 4.0数据类型(Access2000到2003,包括)和各种同义词可以找到here;它还应该提供一些关于哪些类型是Jet 4.0新功能的提示,即帮助您支持早期版本的引擎。

ACE(Access2007)添加了Attachment type;它还添加了multivalued ("complex") types,你需要根据你想要实现的目标自行决定这些是不同类型(或仅仅是现有数据类型的变体)。