c#建立access資料庫和資料表

來源:互聯網
上載者:User
由於在程式中使用了ADOX,所以先要在解決方案中引用之,方法如下:
方案總管-->引用-->(右鍵)添加引用-->COM-->Microsoft ADO Ext. 2.8 for DDL and Security

1.ADOX概述:
Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security (ADOX) 是對 ADO 對象和編程模型的擴充。ADOX 包括用於模式建立和修改的對象,以及安全性。由於它是基於對象實現模式操作,所以使用者可以編寫對各種資料來源都能有效啟動並執行代碼,而與它們原始文法中的差異無關。
ADOX 是核心 ADO 對象的擴充庫。它顯露的其他對象可用於建立、修改和刪除模式對象,如表格和過程。它還包括安全性實體,可用於維護使用者和組,以及授予和撤消對象的許可權。
要通過VS使用 ADOX,需要建立對 ADOX 類型庫的引用。在“Add reference”對話方塊裡切換到Com頁面,選擇“Microsoft ADO Ext. 2.8 for DDL and Security”,然後點擊OK。在檔案的開頭using ADOX名字空間。

2.ADOX的物件模型:
Catalog:
使用如下語句可以建立資料庫:
   // 建立資料庫字串
   string dbName = "D:\DataBase\FirstTable.mdb";
    ADOX.CatalogClass catlog = new ADOX.CatalogClass();
    //或者  ADOX.Catalog  catlog = new ADOX.Catalog();  CatalogClass 是類 ,Catalog是介面 。
    catlog .Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";"+"Jet OLEDB:Engine Type=5");
Table對象包括列、索引和關鍵字的資料庫表:

我們可以如下建立表:
ADOX.TableClass tbl = new ADOX.TableClass(); // 或者 ADOX.Table  tbl = new ADOX.Table();
    tbl.ParentCatalog = catlog; //資料庫名
    tbl.Name = "MyTable";
Table的屬性:

  • 使用 Name 屬性標識表。
  • 使用 Type 屬性確定表的類型。
  • 使用 Columns 集合訪問表的資料庫列。
  • 使用 Indexes 集合訪問表的索引。
  • 使用 Keys 集合訪問表的關鍵字。
  • 使用 ParentCatalog 屬性指定擁有表的 Catalog。
    Columns 對象 :
    我們可以用以下語句建立列:
  •    ADOX.ColumnClass FirstCol = new ADOX.ColumnClass();
        FirstCol.ParentCatalog = catlog;
        FirstCol.Type = ADOX.DataTypeEnum.adInteger;  
        FirstCol.Name = "StuID";
        FirstCol.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
        FirstCol.Properties["AutoIncrement"].Value = true;
        tbl.Columns.Append(FirstCol, ADOX.DataTypeEnum.adInteger, 0);
    Columns 屬性:
  • 使用 Name 屬性識別欄位。
  • 使用 Type 屬性指定列的資料類型。
  • 使用 Attributes 屬性確定是否列是固定長度或包含空值。
  • 使用 DefinedSize 屬性指定列的最大大小。
  • 對於數字資料值,使用 NumericScale 方法指定範圍。
  • 對於數字資料值,使用 Precision 屬性指定最大精度。
  • 使用 ParentCatalog 屬性指定擁有列的 Catalog。
    FirstCol.Properties["Jet OLEDB:Allow Zero Length"].Value = true;這句話是設定這個欄位的屬性,允許長度可以為0,也就是資料庫裡面的欄位可以為空白的意思了。
    AutoIncrement 字面意思就是自增,access裡欄位可以選擇為自增的,也就是自動1、2、3、4這樣累加,不需要你賦值就行。
    3.完整的樣本:
    using System;
    using System.Collections.Generic;
    using System.Text;
    using ADOX;
    namespace ADOXCreateTable
    ...{
        class Program
        ...{
            static void Main(string[] args)
            ...{
              
        string dbName = "D:\DataBase\FirstCatalog.mdb";
        ADOX.CatalogClass catlog = new ADOX.CatalogClass();
        catlog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";"+"Jet OLEDB:Engine Type=5");

        ADOX.TableClass table = new ADOX.TableClass();
        table.ParentCatalog = catlog;
        table.Name = "FirstTable";

        //StuId Column(AutoIncrement )
        ADOX.ColumnClass col1 = new ADOX.ColumnClass();
        col1.ParentCatalog = catlog;
        col1.Type = ADOX.DataTypeEnum.adInteger;
        col1.Name = "StuId";
        col1.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
        col1.Properties["AutoIncrement"].Value = true;
            備忘:
               ADOX.ColumnClass c = new ADOX.ColumnClass();
               c.ParentCatalog = catLog;
               c.Type = ADOX.DataTypeEnum.adLongVarWChar; //這句不能少,並且位置必須在其它屬性前面,否則會報錯。
               c.Name = list1;
               c.Properties["Jet OLEDB:Allow Zero Length"].Value = true;
               tbl.Columns.Append(c, ADOX.DataTypeEnum.adLongVarWChar, 16);
      
        //Name Column
        ADOX.ColumnClass col2 = new ADOX.ColumnClass();
        col2.ParentCatalog = catlog;
        col2.Name = "StuName";
        col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
        
        //Age Column
        ADOX.ColumnClass col3 = new ADOX.ColumnClass();
        col3.ParentCatalog = catlog;
        col3.Name = "Stuage";
        col3.Type = DataTypeEnum.adDouble;
        col3.Properties["Jet OLEDB:Allow Zero Length"].Value = false;

        // Primary
        table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "StuId", "", "");
        table.Columns.Append(col1, ADOX.DataTypeEnum.adInteger, 0);
        table.Columns.Append(col3, ADOX.DataTypeEnum.adDouble, 666);
        table.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 25);
        catlog.Tables.Append(table);

        System.Runtime.InteropServices.Marshal.ReleaseComObject(table);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(catlog);
        table = null;
        catlog = null;
        GC.WaitForPendingFinalizers();
        GC.Collect();
            }
        }
    }
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.