如何在没有互操作程序集的情况下创建Microsoft Jet(Access)数据库?

我需要在不使用ADOX互操作程序集的情况下创建访问(mdb)数据库。

如何才能做到这一点?

在我丢弃这段代码之前,它可能会在stackoverflow上运行

沿着这些方向的东西似乎可以解决问题:

if (!File.Exists(DB_FILENAME)) { var cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DB_FILENAME; // Use a late bound COM object to create a new catalog. This is so we avoid an interop assembly. var catType = Type.GetTypeFromProgID("ADOX.Catalog"); object o = Activator.CreateInstance(catType); catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] {cnnStr}); OleDbConnection cnn = new OleDbConnection(cnnStr); cnn.Open(); var cmd = cnn.CreateCommand(); cmd.CommandText = "CREATE TABLE VideoPosition (filename TEXT , pos LONG)"; cmd.ExecuteNonQuery(); } 

此代码说明了使用OleDbConnection在使用ADOX.Catalog COM组件创建数据库后可以访问数据库。

我和Autsin一样,创建了一个Access数据库,然后将其作为托管资源包含在我的项目中。 在那里,它包含在已编译的代码中,您可以根据需要将其复制到硬盘。 空数据库也相对较小,因此开销不大。

如果您知道如何使用数据库或每次添加哪些表,则可以设置数据库,您可以减少编码量并减慢数据库查询速度。

如果在.net 3.5中使用此连接字符串,则不需要安装Jet(主要问题)

 Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False; 

这应该适用于2007及以后的访问

有趣的问题 – 我从来没有想过像这样在飞行中创建一个。 我总是将我的基线数据库作为项目中的资源包括在内,并在我需要一个新数据时制作副本。

ACE 不在任何框架中(但不是在1,2,3.5,4,4.5中)

它也不是Windows Update的一部分。

JET4在Framework2及更高版本中。

如果您正在使用Access / MDB文件等,则不要假设ACE存在。