我想使用 ADOX 在 VS2010 中创建数据库,但在使用“ADOX.catalogClass”时出现异常错误:无法嵌入互操作类型“ADOX.CatalogClass”。请改用适用的接口。实际上,被标记为错误的特定行是: ADOX.CatalogClass cat = new ADOX.CatalogClass();
ADOX 不适用于 VS2010 吗?我该如何解决这个问题?谢谢
我想使用 ADOX 在 VS2010 中创建数据库,但在使用“ADOX.catalogClass”时出现异常错误:无法嵌入互操作类型“ADOX.CatalogClass”。请改用适用的接口。实际上,被标记为错误的特定行是: ADOX.CatalogClass cat = new ADOX.CatalogClass();
ADOX 不适用于 VS2010 吗?我该如何解决这个问题?谢谢
您在参考上将“嵌入互操作类型”选项设置为 True。非常好的特性,但它不支持直接使用 XxxClass 包装器。不直观,但您可以使用new运算符创建 COM 接口的实例。将您的代码更改为此以消除错误:
ADOX.Catalog cat = new ADOX.Catalog();
我在 VS2010 中使用 ADOX 和 ADOX.Catalog,而不是 CatalogClass。这是我使用它的示例:
private void CreateAndExportLegacyFile(string exportFilePath)
{
var connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;";
connectionString += "Data Source=" + exportFilePath + ";Jet OLEDB:Engine Type=5";
var catalog = new Catalog();
catalog.Create(connectionString);
var table = new Table { Name = "Main" };
#region Column mapping
table.Columns.Append("ID", DataTypeEnum.adVarWChar, 50);
// Snipped rest of them
#endregion
foreach (Column column in table.Columns)
{
if (column.Name != "ID")
{
column.Attributes = ColumnAttributesEnum.adColNullable;
}
}
catalog.Tables.Append(table);
Marshal.FinalReleaseComObject(table);
Marshal.FinalReleaseComObject(catalog.Tables);
Marshal.FinalReleaseComObject(catalog.ActiveConnection);
Marshal.FinalReleaseComObject(catalog);
}