¿Cómo crear una base de datos de Access en tiempo de ejecución en C #?

¿Cómo puedo crear una base de datos de acceso en tiempo de ejecución en C #?

Lo primero que debe hacer es obtener una referencia COM para Microsoft ADO Ext. XX para DDL y seguridad. El XX representa la versión que tengas en tu máquina. El mío solía ser la versión 2.7, pero con Visual Studio 2008, se actualizó a 6.0.

texto alternativo http://sofes.miximages.com/c%23/AddReference_2.png

Una vez que haya agregado la referencia, se agregará ADOX a la sección de uso de su código.

texto alternativo http://sofes.miximages.com/c%23/Using_2.png

A continuación, deberá crear el catálogo de la base de datos. Inserte el nombre de archivo que desea en la siguiente cadena y páselo a CatalogClass.

CatalogClass cat = new CatalogClass(); string tmpStr; string filename = "Sample.MDB"; tmpStr = "Provider=Microsoft.Jet.OLEDB.4.0;"; tmpStr += "Data Source=" + filename + ";Jet OLEDB:Engine Type=5"; cat.Create(tmpStr); 

El siguiente paso es crear la tabla y las columnas para su base de datos. Esta es una operación bastante directa como se muestra en el siguiente ejemplo.

  Table nTable = new Table(); nTable.Name = "PersonData"; nTable.Columns.Append("LastName", DataTypeEnum.adVarWChar, 25); nTable.Columns.Append("FirstName", DataTypeEnum.adVarWChar, 25); nTable.Columns.Append("Address 1", DataTypeEnum.adVarWChar, 45); nTable.Columns.Append("Address 2", DataTypeEnum.adVarWChar, 45); nTable.Columns.Append("City", DataTypeEnum.adVarWChar, 25); nTable.Columns.Append("State", DataTypeEnum.adVarWChar, 2); nTable.Columns.Append("Zip", DataTypeEnum.adVarWChar, 9); cat.Tables.Append(nTable); 

El último paso es muy importante o se producirá un error al cerrar la aplicación. Una vez que se hayan agregado todas las tablas y columnas, deberá liberar los objetos com correctamente y en el orden correcto.

 System.Runtime.InteropServices.Marshal.FinalReleaseComObject(nTable); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.Tables); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat.ActiveConnection); System.Runtime.InteropServices.Marshal.FinalReleaseComObject(cat); 

Eso es. Ahora debería tener una Base de datos de acceso en la que pueda escribir. Espero que esto ayude.

Referencia: John Russell Plant – Crear una base de datos de acceso en C #

Cree una base de datos de acceso en blanco y guárdela en sus archivos de recursos.

Ahora, cuando quiera usarlo, busque esa base de datos de sus recursos y cópiela donde desee, cambie el nombre a lo que desee y ejecute el script de configuración de la base de datos para crear tablas predeterminadas y cargar valores en ellas.

Tratar:

 using ADOX; //Requires Microsoft ADO Ext. 2.8 for DDL and Security using ADODB; public bool CreateNewAccessDatabase(string fileName) { bool result = false; ADOX.Catalog cat = new ADOX.Catalog(); ADOX.Table table = new ADOX.Table(); //Create the table and it's fields. table.Name = "Table1"; table.Columns.Append("Field1"); table.Columns.Append("Field2"); try { cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + fileName + "; Jet OLEDB:Engine Type=5"); cat.Tables.Append(table); //Now Close the database ADODB.Connection con = cat.ActiveConnection as ADODB.Connection; if (con != null) con.Close(); result = true; } catch (Exception ex) { result = false; } cat = null; return result; } 

http://zamirsblog.blogspot.com/2010/11/creating-access-database.html

Este artículo de John Russell Plant explica cómo lo haría con detalles específicos con muestras de código. Hay tres pasos:

  1. Crea el catálogo
  2. Crea las tablas.
  3. Libere los objetos COM relevantes.
 static void IF_EXISTS_DELETE_AND_CREATE(string cn) { //cn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source ="; //cn += AppDomain.CurrentDomain.BaseDirectory.ToString() + "test.mdb"; try { OleDbConnection connection = new OleDbConnection(cn); object[] objArrRestrict; objArrRestrict = new object[] { null, null, null, "TABLE" }; connection.Open(); DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, objArrRestrict); connection.Close(); string[] list; if(schemaTable.Rows.Count > 0) { list = new string[schemaTable.Rows.Count]; int i = 0; foreach (DataRow row in schemaTable.Rows) { list[i++] = row["TABLE_NAME"].ToString(); } for ( i = 0; i < list.Length; i++) { if(list[i] == "TEMP") { string deletedl = "DROP TABLE TEMP"; using (OleDbConnection conn = new OleDbConnection(cn)) { using (OleDbCommand cmd = new OleDbCommand(deletedl, conn)) { conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } } break; } } } string ddl = "CREATE TABLE TEMP (USERID INTEGER NOT NULL,[ADATE] TEXT(20), [ATIME] TEXT(20))"; using(OleDbConnection conn = new OleDbConnection(cn)) { using(OleDbCommand cmd = new OleDbCommand(ddl, conn)) { conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); } } } catch (System.Exception e) { string ex = e.Message; } }