在.NET 2.0框架下动态创建Access数据库和表

本文提供了一个在.NET框架下创建Access数据库及表的示例代码,并详细介绍了如何使用ADOX组件进行数据库和表的创建过程,包括字段类型设定、主键设置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在以前的文章《如何在.NET框架下创建Access数据库和表?》中提供的方法,在.NET 2.0下无效,所有的字段类型都变成了文本类型,不知道微软改变了什么东西。下面将修正后的代码发布如下。

C#:

<%@ 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>
修改版本:


/// <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();
}
VB.NET:

<%@ Page Language="VB" %>

<%@ 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>
修改现有数据库

<%@ Page Language="C#" %>
<!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
  /// 另外,如果修改数据库,需要添加引用: Microsoft ActiveX Data Objects 2.8 Library
  /// </summary>

  protected void Page_Load( object sender, EventArgs e )
  {
    //为了方便测试,数据库名字采用比较随机的名字,以防止添加不成功时还需要重新启动IIS来删除数据库。
    string dbName = Server.MapPath("~") + "//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 = ADOX.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 = ADOX.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();

    //设置主键
    tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", "");
    cat.Tables.Append(tbl);

    Response.Write("<br>数据库表:" + tbl.Name + "已经创建成功!");

    Response.Write("<h4>修改现有数据库:</h4>");
    //打开已经存在的数据库,添加字段
    string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName;
    ADODB.Connection cn = new ADODB.Connection();
    cn.Open(ConnectionString, null, null, 0);
    cat = new ADOX.CatalogClass();
    cat.ActiveConnection = cn;
    Response.Write("数据库:" + dbName + "已经打开成功!");

    ADOX.Table dbTable = cat.Tables["MyTable"];

    //增加一个文本字段
    ADOX.Column newColumn = new ADOX.Column();
    newColumn.ParentCatalog = cat;
    newColumn.Name = "Address";
    newColumn.Properties["Jet OLEDB:Allow Zero Length"].Value = false;   
    dbTable.Columns.Append(newColumn, ADOX.DataTypeEnum.adVarChar, 255);
    Response.Write("<br>数据库表:" + dbTable.Name + "修改成功!");
    cn.Close();

    System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(dbTable);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(cat);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(cn);

    col = null;
    col2 = null;
    col3 = null;
    col4 = null;
    col5 = null;
    newColumn = null;
       
    tbl = null;     
    dbTable = null;
    cat = null; 
   
    GC.WaitForPendingFinalizers();
    GC.Collect();
  }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>创建、修改 Access 数据库</title>
</head>
<body>
  <form id="Mengxianhui" runat="server"></form>
</body>
</html>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值