2008-10-01 17 views

Respuesta

10

Antes me tiro de distancia de este código, puede ser que también viven en stackoverflow

algo en este sentido parece hacer el truco:

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

} 

Este código ilustra que se puede acceder a la base de datos utilizando OleDbConnection una vez creado con el componente ADOX.Catalog COM.

+0

Recibo un error de invocación en esta línea: 'catType.InvokeMember (" Create ", BindingFlags.InvokeMethod, null, o, new object [] {cnnStr});' – Rashad

0

No es necesario Jet (dolor de cabeza importante) instalado, si se utiliza esta cadena de conexión en .NET 3,5

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

Esto debería funcionar en el acceso 2007 y por debajo

+0

Offtopic, ¿sabe si esto funciona en X64? ? ¿Es esto nuevo en 3.5? –

+0

Esto es nuevo en el marco 3.5. No estoy seguro si es compatible con x64 o no. –

+0

Jet 4 está instalado en todas las versiones de Windows desde Windows 2000, entonces ¿por qué le preocuparía pasar por alto a Jet? El ACE no se instalará necesariamente, así que no veo por qué estás recomendando ACE. ¿Se distribuye con .NET 3.5 runtime? –

0

pregunta interesante - I Nunca pensé en crear uno sobre la marcha de esta manera. Siempre incluí mi base de datos de referencia como recurso en el proyecto y realicé una copia cuando necesitaba una nueva.

1

He hecho lo mismo que Autsin, creo un Access db y luego lo incluí en mi proyecto como un recurso administrado. Una vez allí, se incluye en el código compilado y puede copiarlo en el disco duro tantas veces como desee. Las bases de datos vacías también son relativamente pequeñas, por lo que no hay demasiados gastos generales.

La ventaja añadida es la capacidad de configurar la base de datos si sabe cómo se usará o qué tablas se agregarán cada vez, puede reducir la cantidad de codificación y ralentizar las consultas a la base de datos.

0

ACE no es en cualquier marco (todavía. Es decir, no en 1, 2, 3,5, 4, 4,5)

Tampoco es parte de Windows Update.

JET4 es en Framework2 y superior.

Si está trabajando con archivos Access/MDB, etc., no asuma que ACE está presente.

Cuestiones relacionadas