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

5

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

如何完成这个任务?

5个回答

11

在我丢弃这段代码之前,它可以留在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组件创建了它。


我在这行代码中遇到了调用错误:catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] {cnnStr}); - Rashad

1

我和Autsin做了一样的事情,创建了一个Access数据库,然后将其作为托管资源包含到我的项目中。一旦在那里,它就被包含在编译代码中,您可以将其复制到硬盘上任意多次。空数据库也相对较小,因此没有太多的开销。

额外的好处是,如果您知道如何使用它或每次添加哪些表格,您可以设置数据库,从而减少编码量和缓慢的数据库查询。


0
ACE 还没有(即尚未加入1、2、3.5、4、4.5等版本)成为任何框架的一部分。
它也不是 Windows Update 的一部分。
JET4 已经包含在 Framework2 及以上版本中。
如果您正在处理 Access/MDB 文件等,不要假设 ACE 已经存在。

0
有趣的问题 - 我从未想过像这样即时创建一个。我总是将我的基线数据库作为项目资源包含在内,并在需要新数据库时进行复制。

0

如果您在 .net 3.5 中使用这个连接字符串,就不需要安装 Jet(主要是麻烦)。

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

这应该适用于Access 2007及以下版本


离题一下,你知道这个在X64上能不能运行吗?这是3.5新加的功能吗? - Sam Saffron
Jet 4已经安装在自Windows 2000以来的所有Windows版本上了,所以您为什么要担心绕过Jet呢?ACE并不一定会安装,所以我不明白您为什么要推荐ACE。它是否随着.NET 3.5运行时分发? - David-W-Fenton
同意,Jet 4.0 更有可能已经安装。ACE 可以从 Microsoft 的免费下载中获得(http://www.microsoft.com/downloads/details.aspx?FamilyId=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en)。 - onedaywhen
Jet是Windows操作系统的一部分,从Windows 2000开始就已经包含在内了。这就是为什么它不再属于MDAC,因为从2000年以后的所有Windows版本都已经包含了它。 - David-W-Fenton
Aaron,你怎么用这个方法创建一个新的Access数据库呢?使用这个连接字符串只是允许你连接到已存在的数据库,对吗? - Jess Chadwick
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接