2008-10-01 8 views

risposta

10

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.

+0

Errore di chiamata in questa riga: 'catType.InvokeMember (" Crea ", BindingFlags.InvokeMethod, null, o, nuovo oggetto [] {cnnStr});' – Rashad

0

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

+0

Offtopic, sai se funziona su X64 ? È nuovo a 3.5? –

+0

Questo è nuovo per il framework 3.5. Non sono sicuro che sia compatibile x64 o meno. –

+0

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? –

0

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.

1

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.

0

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.

Problemi correlati