zoukankan      html  css  js  c++  java
  • 在.NET 2.0框架下动态创建Access数据库和表时的注意事项 (zz)

    在.NET 2.0框架下动态创建Access数据库和表时的注意事项
    //z 2012-08-10 19:33:37 IS2120@csdn.T2247216201[T74,L793,R28,V696]

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

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

    【Update】下面的代码添加对现有数据库的字段添加:
    //z 2012-08-10 19:33:37 IS2120@csdn.T2247216201[T74,L793,R28,V696]

    <%@ 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, 
    nullnull0);
        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>
    //z 2012-08-10 19:33:37 IS2120@csdn.T2247216201[T74,L793,R28,V696]

  • 相关阅读:
    [LeetCode] 55. Jump Game 跳跃游戏
    [LeetCode] 163. Missing Ranges 缺失区间
    [LeetCode] 228. Summary Ranges 总结区间
    获取当时时间和日期
    响应式布局设备分界点
    html5shiv.js分析-读源码之javascript系列
    建站模板开源代码
    js 调试问题
    transform使用参考指南
    浏览器版本过低
  • 原文地址:https://www.cnblogs.com/IS2120/p/6745855.html
Copyright © 2011-2022 走看看