How do I create a Microsoft Jet (Access) database without an interop assembly?
c#, interop, jet
Solution
Before I throw away this code, it might as well live on stackoverflow
Something along these lines seems to do the trick:
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();
}
This code illustrates that you can access the database using OleDbConnection once its created with the ADOX.Catalog COM component.
Problem
I need to create an access (mdb) database without using the ADOX interop assembly. How can this be done?