由於在程式中使用了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();
}
}
}