2009-09-07 58 views

回答

2

這篇來自John Russell Plant的文章解釋瞭如何在代碼示例中詳細說明。有三個步驟:

  1. 創建目錄。
  2. 創建表格。
  3. 釋放相關的COM對象。
+0

我會建議,相比我的做法。 :) – Mahin 2009-09-07 11:46:29

+2

該鏈接似乎已經死亡。 – cdmckay 2012-12-18 16:23:52

5

創建一個空白訪問數據庫並將其存儲在您的資源文件中。

現在,只要你想使用它,從你的資源中獲取數據庫並將其複製到你想要的任何地方,將它重命名爲任何你想要的,然後執行你的數據庫設置腳本來創建默認表並在其中加載值。

13

您需要做的第一件事是獲得對Microsoft ADO Ext的COM引用。 X.X用於DDL和安全性。 X.X表示您機器上的任何版本。我曾經是2.7版本,但隨着Visual Studio 2008,它被更新爲6.0。

alt text http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/CreateanAccessDatabaseinC_10DDD/AddReference_2.png

一旦你已經添加了引用,ADOX將被添加到您的代碼中使用區間。

alt text http://blog.jrpsoftware.com/content/binary/WindowsLiveWriter/CreateanAccessDatabaseinC_10DDD/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 - Create an Access Database in C#

+0

我認爲John Feminella已經在他的回答中發佈了這篇文章的鏈接。 – Mahin 2009-09-07 11:57:21

+0

您的圖像鏈接被破壞 – user 2012-10-10 03:32:02

+0

該參考鏈接也被打破 – Maxence 2015-12-02 12:58:15

2

嘗試:

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

+0

對於那些不清楚的人:你會發現'Microsoft ADO Ext。對於添加引用中的COM選項卡下的DDL和安全性參考,請參閱2.8,而不是.NET版本。 – cdmckay 2012-12-18 16:46:29

0
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; 
    } 
} 
相關問題