COM例外:"班级未注册"在尝试创建ADOX.Catalog时

时间:2015-01-20 14:44:20

标签: c# database ms-access adox

我一直在尝试通过C#创建Access数据库。我已经尝试过使用this postthis post中的代码,我必须承认,这些代码非常有帮助。 现在这是我的代码中应该创建Access数据库的部分:

 public bool CreateNewAccessDatabase(string fileName)
    {
            //var cat = new ADOX.Catalog();
            //using var instead of CatalogClass hasn't worked either.
            ADOX.CatalogClass cat = new ADOX.CatalogClass();
            string tmpStr;
            string filename = fileName;
            tmpStr = "Provider=Microsoft.Jet.OLEDB.4.0;";
            tmpStr += "Data Source=" + filename + ";Jet OLEDB:Engine Type=5";
            cat.Create(tmpStr);
        Console.Out.WriteLine("OK");

        Table nTable = new Table();
        nTable.Name = "NombreDeEmpresa";
        nTable.Columns.Append("CAMPO1", ADOX.DataTypeEnum.adVarWChar, 25);
        nTable.Columns.Append("CAMPO2", ADOX.DataTypeEnum.adVarWChar, 45);
        nTable.Columns.Append("CAMPO3", ADOX.DataTypeEnum.adVarWChar, 45);
        nTable.Columns.Append("CAMPO4", ADOX.DataTypeEnum.adVarWChar, 45);
        nTable.Columns.Append("CAMPO5", ADOX.DataTypeEnum.adVarWChar, 25);
        nTable.Columns.Append("CAMPO6", ADOX.DataTypeEnum.adVarWChar, 20);
        nTable.Columns.Append("CAMPO7", ADOX.DataTypeEnum.adVarWChar, 15);
        cat.Tables.Append(nTable);

        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(nTable);
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.Tables);
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection);
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat);

        return true;
     }

但是,如果我调试代码,当我到达以下行:

时,我总会得到相同的异常
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5;");    

我可以看到我可以从Exception中检索的所有信息here(抱歉我的Visual Studio是西班牙语,我认为信息仍然清晰)。哦,我的参考资料中确实有ADOX和adodb。有谁知道如何解决这个问题?

我正在使用VS10,在Windows 7 x64上运行。

1 个答案:

答案 0 :(得分:3)

年长的微软" Jet"驱动程序仅适用于32位应用程序。如果你想使用Jet,你需要进入" Build" Visual Studio项目的属性选项卡,并设置"目标平台"到" x86"。这将强制您的应用程序以32位运行。