Devo creare un database di accesso (mdb) senza utilizzare l'assembly di interoperabilità ADOX.Come si crea un database Microsoft Jet (Access) senza un assembly di interoperabilità?
Come si può fare?
Devo creare un database di accesso (mdb) senza utilizzare l'assembly di interoperabilità ADOX.Come si crea un database Microsoft Jet (Access) senza un assembly di interoperabilità?
Come si può fare?
Prima di buttare via questo codice, si potrebbe anche vivere su StackOverflow
Qualcosa in questo senso 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 illustra che è possibile accedere al database utilizzando OleDbConnection una volta creato con il componente COM ADOX.Catalog.
Non è necessario Jet (grandi preoccupazioni) installato, 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 su Access 2007 e al di sotto
Offtopic, sai se funziona su X64 ? È nuovo a 3.5? –
Questo è nuovo per il framework 3.5. Non sono sicuro che sia compatibile x64 o meno. –
Jet 4 è installato su tutte le versioni di Windows da Windows 2000, quindi perché dovresti preoccuparti di bypassare Jet? L'ACE non verrà necessariamente installato, quindi non vedo perché raccomandi ACE. È distribuito con il runtime .NET 3.5? –
Domanda interessante - I 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 uno nuovo.
Ho fatto lo stesso di Autsin, ho creato un Access db e 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 sovraccarico.
Il vantaggio aggiunto è la possibilità di configurare il database se si sa come verrà utilizzato o quali tabelle verranno aggiunte ogni volta, è possibile ridurre la quantità di codice e rallentare le query del database.
ACE non è in qualsiasi quadro (ancora. Cioè non in 1, 2, 3.5, 4, 4.5)
Non è anche parte di Windows Update.
JET4 è in Framework2 e versioni successive.
Se si lavora con file Access/MDB, ecc. Non si presume che ACE sia presente.
Errore di chiamata in questa riga: 'catType.InvokeMember (" Crea ", BindingFlags.InvokeMethod, null, o, nuovo oggetto [] {cnnStr});' – Rashad