Come si crea un database Microsoft Jet (Access) senza un assembly di interoperabilità?

StackOverflow https://stackoverflow.com/questions/155848

  •  03-07-2019
  •  | 
  •  

Domanda

Devo creare un database di accesso (mdb) senza usare l'assembly di interoperabilità ADOX.

Come si può fare?

È stato utile?

Soluzione

Prima di buttare via questo codice, potrebbe anche vivere su stackoverflow

Qualcosa del genere sembra fare il trucco:

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();

}

Questo codice mostra che è possibile accedere al database usando OleDbConnection una volta creato con il componente COM ADOX.Catalog.

Altri suggerimenti

Ho fatto lo stesso di Autsin, ho creato un db di Access e poi l'ho incluso nel mio progetto come risorsa gestita. Una volta lì, è incluso nel codice compilato e puoi copiarlo sul disco rigido tutte le volte che vuoi. Anche i database vuoti sono relativamente piccoli, quindi non c'è molto overhead.

Il bonus aggiunto è la possibilità di impostare il database se si sa come verrà utilizzato o quali tabelle verranno aggiunte ogni volta, è possibile ridurre la quantità di codifica e rallentare le query del database.

Non è necessario installare Jet (mal di testa maggiore), se si utilizza questa stringa di connessione in .net 3.5

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

Questo dovrebbe funzionare con accesso 2007 e successivi

Domanda interessante: non ho mai pensato di crearne uno al volo in questo modo. Ho sempre incluso il mio database di base come risorsa nel progetto e ne ho fatto una copia quando ne avevo bisogno di uno nuovo.

ACE non è in nessun framework (ancora. cioè non in 1, 2, 3.5, 4, 4.5)

Inoltre, non fa parte di Windows Update.

JET4 è in Framework2 e versioni successive.

Se stai lavorando con file Access / MDB ecc., allora non dare per scontato che sia presente ACE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top