Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)delv
published in(发表于) 2014/1/16 9:31:25
在.NET,2.0框架下动态创建Access数据库和表_[Asp.Net教程]

在.NET 2.0框架下动态创建Access数据库和表_[Asp.Net教程]

















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




C#:




<%@ Page Language="C#" %>




<%@ Import Namespace="ADOX" %>









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







修改版本:





///


/// CreateAccessDB 的摘要说明。
/// 对于不同版本的ADO,需要添加不同的引用
/// 请添加引用Microsoft ADO Ext. 2.7 for DDL and Security
/// 请添加引用Microsoft ADO Ext. 2.8 for DDL and Security
///




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("

得到各个列的名字:

");
for (int i = 0 ; i < tbl.Columns.Count ; i++)
{
Response.Write("
  • " + i.ToString() + " = " + tbl.Columns[i].Name + " 类型:" + tbl.Columns[i].Type.ToString());
    }




    Response.Write("

    删除 Description 列:

    ");
    tbl.Columns.Delete("Description");
    tbl.Columns.Refresh();




    Response.Write("

    修改 “数字类型字段” 列名字:

    ");
    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 = ("
    数据库表:" + 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" %>









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










    来源:孟宪会之精彩世界

























    If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





    QQ:154298438
    QQ:417480759