logo

使用 ADOX 创建 Access 数据库设置多个字段为主键的方法

作者:孟宪会 阅读:1909 发表于:2011-01-24 12:38:54

下面的代码实现ADOX创建Access数据库时,创建多个字段为主键的方法。

ASPX 代码
<%@ Page Language="C#" %>

<%@ Import Namespace="ADOX" %>
<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 = Server.MapPath("~") + "\\" + Guid.NewGuid().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
= "TableName";

    
//增加一个自动增长的字段
    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 col_
= new ADOX.ColumnClass();
    col_.ParentCatalog
= cat;
    col_.Type
= ADOX.DataTypeEnum.adInteger; // 必须先设置字段类型
    col_.Name = "id2";
    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;

    
// 设置多列主键
    ADOX.Key PK_Key = new ADOX.Key();
    PK_Key.Columns.Append(
"id");
    PK_Key.Columns.Append(
"id2");
    PK_Key.Name
= "PrimaryKey";
    tbl.Keys.Append(PK_Key, ADOX.KeyTypeEnum.adKeyPrimary);

    
//设置单主键的方法,只需一行
    //tbl.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "id", "", "");
    cat.Tables.Append(tbl);

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

    System.Runtime.InteropServices.Marshal.ReleaseComObject(tbl);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(cat);
    tbl
= null;
    cat
= null;
    GC.WaitForPendingFinalizers();
    GC.Collect();
  }
</script>