zoukankan      html  css  js  c++  java
  • C# 创建表ACCESS表,添加修改字段

    最开始以为access 修改字段信息,用 ALTER TABLE 语句就可以了,

    打开access 文件执行了

    ALTER TABLE user ALTER COLUMN address TEXT(10)

    发现可以运行,于是乎,就用C#链接 数据库 OleDbConnection,OleDbCommand 去执行,可是字符串一模一样。 就是执行报错提示  ALTER TABLE 语法错误.

    http://www.accessoft.com/article-show.asp?id=929

    https://support.microsoft.com/zh-cn/office/alter-table-%E8%AF%AD%E5%8F%A5-81d241e3-1522-4103-acf0-9857888d581c

    既然说用DAO create方法。

    ============================================================

    C#操作Access数据库(创建&修改结构)

    想要在程序中控制Access,不是数据,而是Access数据库的表结构啊,字段啊..就要用到ADOX


    所以先要在解决方案中引用之,方法如下:
    解决方案资源管理器 --> 引用 --> (右键)添加引用 --> COM --> Microsoft ADO Ext. 2.8 for DDL and Security  

    注意:

    当创建ACCESS数据库的时候,会自动创建一个连接,为了释放.ldb文件,必须关闭这一连接。而这个连接是ADODB类的,所以很多人一直都找不到释放连接的方法。 

    方法如下: 引用 --> (右键)添加引用 --> COM --> Microsoft ActiveX Data Objects 2.8 Library

    有了这个两个COM组件后,就可以开始一系列操作啦。。。

    一.创建Access数据库 

    string dbName = "E:\Temp\" + DateTime.Now.Millisecond.ToString() + ".mdb";//注意扩展名必须为mdb,否则不能插入表
    ADOX.CatalogClass cat = new ADOX.CatalogClass();
    cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";");

    二.建立连接使用已有数据表

            ADODB.Connection conn = new ADODB.Connection();
            conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=DB/MarketDB.mdb", null, null, -1);
            ADOX.Catalog catalog = new ADOX.Catalog();
            catalog.ActiveConnection = conn;
            ADOX.Table table = catalog.Tables["user"];

    三.建立一个数据表

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

    下面的这句很重要哦:

    cat.Tables.Append(tbl); //把表加入数据库(非常重要)

    六:关闭

    //转换为ADO连接,并关闭
    (cat.ActiveConnection as ADODB.Connection).Close();
    cat.ActiveConnection = null;
    cat = null;

    附件:代码

    /// <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(); 
       } 

    转: https://blog.csdn.net/xiatiancc/article/details/80405232

    https://www.cnblogs.com/lanyubaicl/p/10102032.html

    https://blog.csdn.net/hit_why/article/details/53435984

  • 相关阅读:
    伪句柄
    WM_NCACTIVE
    怎么让模态对话框最小化时,主窗口也最小化
    CMap和CArray中ARG_
    看着嫦娥2号上去,心里激动不已
    Qt中使两个部件同步,这里为spin和slider
    memcpy 和strcpy的区别
    如何在linux内核中读写文件
    Could not find *****/adb.exe!的解决方法(android sdk太新了?**#¥)
    加入了HTML特点的Qt,出来的效果不错哟
  • 原文地址:https://www.cnblogs.com/fps2tao/p/15103088.html
Copyright © 2011-2022 走看看