如何在C#中在运行时创建Access数据库?

如何在C#中在运行时创建Access数据库?

您需要做的第一件事是获得Microsoft ADO Ext的COM引用。 XX用于DDL和安全。 XX表示您在计算机上碰巧遇到的任何版本。 我曾经是2.7版本,但在Visual Studio 2008中,它已更新为6.0。

alt text http://sofzh.miximages.com/c%23/AddReference_2.png

添加引用后,ADOX将添加到代码的using部分。

alt text http://sofzh.miximages.com/c%23/Using_2.png

接下来,您将要为数据库创建目录。 将您希望的文件名插入以下字符串并将其传递给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); 

下一步是为数据库创建表和列。 这是一个非常简单的操作,如下例所示。

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

最后一步非常重要,否则当您关闭应用程序时会出错。 添加完所有表和列后,您将需要以正确的顺序正确释放com对象。

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

这就对了。 您现在应该有一个可以写入的Access数据库。 希望这可以帮助。

参考: John Russell Plant – 用C#创建一个Access数据库

创建一个空白访问数据库并将其存储在资源文件中。

现在,只要您想使用它,从您的资源中获取该数据库并将其复制到您想要的任何位置,将其重命名为您想要的任何内容,并执行数据库设置脚本以创建默认表并在其中加载值。

尝试:

 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

John Russell Plant的这篇文章解释了如何使用代码示例详细地完成它。 有三个步骤:

  1. 创建目录。
  2. 创建表。
  3. 释放相关的COM对象。
 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; } }