在以前的文章《如何在.NET框架下創建Access數據庫和表?》中提供的方法,在.NET 2.0下無效,所有的字段類型都變成了文本類型,不知道微軟改變了什麼東西。提醒大家注意,需要加ADOX.ColumnClass.Type = DataTypeEnum.adLongVarBinary屬性。下面將修正後的代碼發佈如下。
C#:
<%@ Import Namespace="ADOX" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
/// <summary>
/// CreateAccessDB 的摘要說明。
/// 對於不同版本的ADO,需要添加不同的引用
/// 請添加引用Microsoft ADO Ext. 2.7 for DDL and Security
/// 請添加引用Microsoft ADO Ext. 2.8 for DDL and Security
/// </summary>
protected void Page_Load(object sender, EventArgs e)
{
//爲了方便測試,數據庫名字採用比較隨機的名字,以防止添加不成功時還需要重新啓動IIS來刪除數據庫。
string dbName = "D:/NewMDB" + DateTime.Now.Millisecond.ToString() + ".mdb";
ADOX.CatalogClass cat = new ADOX.CatalogClass();
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";");
Response.Write("數據庫:" + dbName + "已經創建成功!");
ADOX.TableClass tbl = new ADOX.TableClass();
tbl.ParentCatalog = cat;
tbl.Name = "MyTable";
//增加一個自動增長的字段
ADOX.ColumnClass col = new ADOX.ColumnClass();
col.ParentCatalog = cat;
col.Type = ADOX.DataTypeEnum.adInteger; // 必須先設置字段類型
col.Name = "id";
col.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
col.Properties["AutoIncrement"].Value = true;
tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0);
//增加一個文本字段
ADOX.ColumnClass col2 = new ADOX.ColumnClass();
col2.ParentCatalog = cat;
col2.Name = "Description";
col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 25);
//增加數字字段
ADOX.ColumnClass col3 = new ADOX.ColumnClass();
col3.ParentCatalog = cat;
col3.Name = "數字";
col3.Type = DataTypeEnum.adDouble;
col3.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
tbl.Columns.Append(col3, ADOX.DataTypeEnum.adDouble, 666);
//增加Ole字段
ADOX.ColumnClass col4 = new ADOX.ColumnClass();
col4.ParentCatalog = cat;
col4.Name = "Ole類型";
col4.Type = DataTypeEnum.adLongVarBinary;
col4.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
tbl.Columns.Append(col4, ADOX.DataTypeEnum.adLongVarBinary, 0);
//設置主鍵
tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", "");
cat.Tables.Append(tbl);
msg.Text = ("<br>數據庫表:" + tbl.Name + "已經創建成功!");
System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl);
System.Runtime.InteropServices.Marshal.ReleaseComObject(cat);
tbl = null;
cat = null;
GC.WaitForPendingFinalizers();
GC.Collect();
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>在.NET框架下動態創建Access數據庫和表</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="msg" runat="server" />
</form>
</body>
</html>
<%@ Import Namespace="ADOX" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim dbName As String = "D:NewMDB" + DateTime.Now.Millisecond.ToString + ".mdb"
Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";")
Response.Write("數據庫:" + dbName + "已經創建成功!")
Dim tbl As ADOX.TableClass = New ADOX.TableClass
tbl.ParentCatalog = cat
tbl.Name = "MyTable"
Dim col As ADOX.ColumnClass = New ADOX.ColumnClass
col.ParentCatalog = cat
col.Type = ADOX.DataTypeEnum.adInteger
col.Name = "id"
col.Properties("Jet OLEDB:Allow Zero Length").Value = False
col.Properties("AutoIncrement").Value = True
tbl.Columns.Append(col, ADOX.DataTypeEnum.adInteger, 0)
Dim col2 As ADOX.ColumnClass = New ADOX.ColumnClass
col2.ParentCatalog = cat
col2.Name = "Description"
col2.Properties("Jet OLEDB:Allow Zero Length").Value = False
tbl.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 25)
Dim col3 As ADOX.ColumnClass = New ADOX.ColumnClass
col3.ParentCatalog = cat
col3.Name = "數字"
col3.Type = DataTypeEnum.adDouble
col3.Properties("Jet OLEDB:Allow Zero Length").Value = False
tbl.Columns.Append(col3, ADOX.DataTypeEnum.adDouble, 666)
Dim col4 As ADOX.ColumnClass = New ADOX.ColumnClass
col4.ParentCatalog = cat
col4.Name = "Ole類型"
col4.Type = DataTypeEnum.adLongVarBinary
tbl.Columns.Append(col4, ADOX.DataTypeEnum.adLongVarBinary, 0)
tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", "")
cat.Tables.Append(tbl)
msg.Text = ("<br>數據庫表:" + tbl.Name + "已經創建成功!")
System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl)
System.Runtime.InteropServices.Marshal.ReleaseComObject(cat)
tbl = Nothing
cat = Nothing
GC.WaitForPendingFinalizers()
GC.Collect()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>在.NET框架下動態創建Access數據庫和表</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Label ID="msg" runat="server" />
</form>
</body>
</html>
更多內容請到www.05yl.cn