孟宪会写的,需要引用COM标签页中Microsoft ADO Ext. 2.8 for DDL and Security
第一个版本,我试过好用,而且能够释放资源
<%@ Page Language="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>
第二个版本,可以创建列、修改,删除,创建主键,但创建之后出现.ldb文件,说明数据库数据处于锁定
状态,似乎数据库链接没有释放!
/// <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 = Server.MapPath("~/_Test") + "//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);
Response.Write("<h4>得到各个列的名字:</h4>");
for (int i = 0 ; i < tbl.Columns.Count ; i++)
{
Response.Write("<li>" + i.ToString() + " = " + tbl.Columns[i].Name + " 类型:" + tbl.Columns[i].Type.ToString());
}
Response.Write("<h4>删除 Description 列:</h4>");
tbl.Columns.Delete("Description");
tbl.Columns.Refresh();
Response.Write("<h4>修改 “数字类型字段” 列名字:</h4>");
ADOX.ColumnClass col5 = (ADOX.ColumnClass)tbl.Columns["数字类型字段"];
col5.Name = "新名字类型字段";
tbl.Columns.Refresh();
col5 = null;
//设置主键
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();
}