我需要创建一个不使用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;
这应该适用于Access 2007及以下版本
catType.InvokeMember("Create", BindingFlags.InvokeMethod, null, o, new object[] {cnnStr});
- Rashad