我需要在不使用ADOX互操作程序集的情况下创建访问(mdb)数据库。
如何做到这一点?
答案 0 :(得分:10)
在我丢弃此代码之前,它可能还可以使用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();
}
此代码说明一旦使用ADOX.Catalog COM组件创建OleDbConnection,就可以访问数据库。
答案 1 :(得分:1)
我和Autsin一样,创建了一个Access数据库,然后将其作为托管资源包含在我的项目中。在那里,它包含在已编译的代码中,您可以根据需要将其复制到硬盘。空数据库也相对较小,因此没有太多开销。
如果您知道如何使用数据库或每次添加哪些表,则可以设置数据库,您可以减少编码量并减慢数据库查询速度。
答案 2 :(得分:0)
如果在.net 3.5
中使用此连接字符串,则不需要安装Jet(主要问题)Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\myFolder\myAccess2007file.accdb;Persist
Security Info=False;
这应该适用于访问2007及以下
答案 3 :(得分:0)
有趣的问题 - 我从未想过像这样在飞行中创建一个。我总是将我的基线数据库作为资源包含在项目中,并在我需要一个新数据时制作副本。
答案 4 :(得分:0)
ACE 在任何框架中都不是(但不是在1,2,3.5,4,4.5中)
它也不是Windows Update的一部分。
在Framework2及更高版本中,JET4 。
如果您正在使用Access / MDB文件等,请不要认为ACE存在。