• c#创建access数据库和数据表


     

    由于在程序中使用了ADOX,所以先要在解决方案中引用之,方法如下: 
    解决方案资源管理器(项目名称)-->(右键)添加引用-->COM--> Microsoft ADO Ext. 2.8 for DDL and Security

                                                                                   和  Microsoft ActiveX Data Objects 2.8 Library 

    1.ADOX概述: 
    Microsoft® ActiveX® Data Objects Extensions for Data Definition Language and Security (ADOX) 是对 ADO 对象和编程模型的扩展。ADOX 包括用于模式创建和修改的对象,以及安全性。由于它是基于对象实现模式操作,所以用户可以编写对各种数据源都能有效运行的代码,而与它们原始语法中的差异无关。 
    ADOX 是核心 ADO 对象的扩展库。它显露的其他对象可用于创建、修改和删除模式对象,如表格和过程。它还包括安全对象,可用于维护用户和组,以及授予和撤消对象的权限。 
    要通过VS使用 ADOX,需要建立对 ADOX 类型库的引用。在“Add reference”对话框里切换到Com页面,选择“Microsoft ADO Ext. 2.8 for DDL and Security”,然后点击OK。

    在文件的开头    

    using ADOX;

    using System.IO;

     

    2.ADOX的对象模型: 
    Catalog: 
    使用如下语句可以创建数据库: 
       // 创建数据库字符串 
       string dbName = "D:/DataBase/FirstTable.mdb"; 
        ADOX.CatalogClass catlog = new ADOX.CatalogClass(); 
        //或者  ADOX.Catalog  catlog = new ADOX.Catalog();  CatalogClass 是类 ,Catalog是接口 。 
        catlog .Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";"+"Jet OLEDB:Engine Type=5"); 
    Table对象包括列、索引和关键字的数据库表: 

    我们可以如下创建表: 
     ADOX.TableClass tbl = new ADOX.TableClass(); // 或者 ADOX.Table  tbl = new ADOX.Table(); 
        tbl.ParentCatalog = catlog; //数据库名 
        tbl.Name = "MyTable"; 
    Table的属性:

    • 使用 Name 属性标识表。
    • 使用 Type 属性确定表的类型。
    • 使用 Columns 集合访问表的数据库列。
    • 使用 Indexes 集合访问表的索引。
    • 使用 Keys 集合访问表的关键字。
    • 使用 ParentCatalog 属性指定拥有表的 Catalog。 
      Columns 对象 : 
      我们可以用以下语句创建列:
    •    ADOX.ColumnClass FirstCol = new ADOX.ColumnClass(); 
          FirstCol.ParentCatalog = catlog; 
          FirstCol.Type = ADOX.DataTypeEnum.adInteger;   
          FirstCol.Name = "StuID"; 
          FirstCol.Properties["Jet OLEDB:Allow Zero Length"].Value = false; 
          FirstCol.Properties["AutoIncrement"].Value = true; 
          tbl.Columns.Append(FirstCol, ADOX.DataTypeEnum.adInteger, 0); 
      Columns 属性:
    • 使用 Name 属性标识列。
    • 使用 Type 属性指定列的数据类型。
    • 使用 Attributes 属性确定是否列是固定长度或包含空值。
    • 使用 DefinedSize 属性指定列的最大大小。
    • 对于数字数据值,使用 NumericScale 方法指定范围。
    • 对于数字数据值,使用 Precision 属性指定最大精度。
    • 使用 ParentCatalog 属性指定拥有列的 Catalog。 
      FirstCol.Properties["Jet OLEDB:Allow Zero Length"].Value = true;这句话是设置这个字段的属性,允许长度可以为0,也就是数据库里面的字段可以为空的意思了。 
      AutoIncrement 字面意思就是自增,access里字段可以选择为自增的,也就是自动1、2、3、4这样累加,不需要你赋值就行。 

         

    一.创建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 + ";");

    二.新建一个表

    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); //把表加入数据库(非常重要)

    五.打开修改Access数据库

    ADODB.Connection conn = new ADODB.Connection();//ADO连接对象
    conn.Open("Provider=Microsoft.Jet.OleDb.4.0;Data Source=Interop.Portal.dll", "", "", 0);
    ADOX.CatalogClass cat = new ADOX.CatalogClass();
    cat.ActiveConnection = conn;//设置活动的连接对象

    下面的这句非常重要哦: (创建&修改都需要)

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

    C#动态创建Access数据库及表的方法


    //添加两个com组件引用
    //Microsoft ADO Ext. 2.8 for DDL and Security
    //Microsoft ActiveX Data Objects 2.8 Library

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using ADOX;
    using System.IO;
    namespace WebRequestTest.Common
    {
    public static class AccessDbHelper
    {
    /// <summary>
    /// 创建access数据库
    /// </summary>
    /// <param name="filePath">数据库文件的全路径,如 D:\NewDb.mdb</param>
    public static bool CreateAccessDb(string filePath)
    {
    ADOX.Catalog catalog = new Catalog();
    if (!File.Exists(filePath))
    {
    try
    {
    catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;DData Source=" + filePath + ";Jet OLEDB:Engine Type=5");
    }
    catch (System.Exception ex)
    {
    return false;
    }
    }
    return true;
    }
    /// <summary>
    /// 在access数据库中创建表
    /// </summary>
    /// <param name="filePath">数据库表文件全路径如D:\NewDb.mdb 没有则创建 </param>
    /// <param name="tableName">表名</param>
    /// <param name="colums">ADOX.Column对象数组</param>
    public static void CreateAccessTable(string filePath, string tableName, params ADOX.Column[] colums)
    {
    ADOX.Catalog catalog = new Catalog();
    //数据库文件不存在则创建
    if (!File.Exists(filePath))
    {
    try
    {
    catalog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Jet OLEDB:Engine Type=5");
    }
    catch (System.Exception ex)
    {
    }
    }
    ADODB.Connection cn = new ADODB.Connection();
    cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath, null, null, -1);
    catalog.ActiveConnection = cn;
    ADOX.Table table = new ADOX.Table();
    table.Name = tableName;
    foreach (var column in colums)
    {
    table.Columns.Append(column);
    }
    // column.ParentCatalog = catalog;
    //column.Properties["AutoIncrement"].Value = true; //设置自动增长
    //table.Keys.Append("FirstTablePrimaryKey", KeyTypeEnum.adKeyPrimary, column, null, null); //定义主键
    catalog.Tables.Append(table);
    cn.Close();
    }
    //========================================================================================调用
    //ADOX.Column[] columns = {
    // new ADOX.Column(){Name="id",Type=DataTypeEnum.adInteger,DefinedSize=9},
    // new ADOX.Column(){Name="col1",Type=DataTypeEnum.adWChar,DefinedSize=50},
    // new ADOX.Column(){Name="col2",Type=DataTypeEnum.adLongVarChar,DefinedSize=50}
    // };
    // AccessDbHelper.CreateAccessTable("d:\111.mdb", "testTable", columns);
    }
    }

                        简单创建表的实例
     

    string dbName = "F:/FirstCatalog.mdb";
    //string dbName = "F:\FirstCatalog" + DateTime.Now.Millisecond.ToString() + ".mdb";
    // dbName = System.Windows.Forms.Application.StartupPath + "\FirstCatalog.mdb";

    ADOX.Catalog catlog = new ADOX.Catalog();
    if (!File.Exists(dbName))
    {
    catlog.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";" + "Jet OLEDB:Engine Type=5");
    //Response.Write("数据库:" + dbName + "已经创建成功!");

    ADOX.Table table = new ADOX.Table();
    table.ParentCatalog = catlog;
    table.Name = "FirstTable";

    //StuId Column(AutoIncrement ) //增加一个自动增长的字段
    ADOX.Column col1 = new ADOX.Column();
    col1.ParentCatalog = catlog;
    col1.Type = ADOX.DataTypeEnum.adInteger;
    col1.Name = "StuId";
    col1.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
    col1.Properties["AutoIncrement"].Value = true;
    table.Columns.Append(col1, ADOX.DataTypeEnum.adInteger, 0);

    ////备注:
    //ADOX.Column c = new ADOX.Column();
    //c.ParentCatalog = catlog;
    //c.Type = ADOX.DataTypeEnum.adLongVarWChar; //这句不能少,并且位置必须在其它属性前面,否则会报错。
    //c.Name = "list1";
    //c.Properties["Jet OLEDB:Allow Zero Length"].Value = true;
    //table.Columns.Append(c, ADOX.DataTypeEnum.adLongVarWChar, 16);

    //Name Column //增加一个文本字段
    ADOX.Column col2 = new ADOX.Column();
    col2.ParentCatalog = catlog;
    col2.Name = "StuName";
    col2.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
    table.Columns.Append(col2, ADOX.DataTypeEnum.adVarChar, 25);

    //Age Column //增加数字字段
    ADOX.Column col3 = new ADOX.Column();
    col3.ParentCatalog = catlog;
    col3.Name = "Stuage";
    col3.Type = DataTypeEnum.adDouble;
    col3.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
    table.Columns.Append(col3, ADOX.DataTypeEnum.adDouble, 666);

    //增加Ole字段
    ADOX.Column col4 = new ADOX.Column();
    col4.ParentCatalog = catlog;
    col4.Name = "Ole类型";
    col4.Type = DataTypeEnum.adLongVarBinary;
    col4.Properties["Jet OLEDB:Allow Zero Length"].Value = false;
    table.Columns.Append(col4, ADOX.DataTypeEnum.adLongVarBinary, 0);

    //Primary 设置主键
    table.Keys.Append("PrimaryKey", ADOX.KeyTypeEnum.adKeyPrimary, "StuId", "", "");
    catlog.Tables.Append(table);

    //msg.Text = ("<br>数据库表:" + tbl.Name + "已经创建成功!");

    System.Runtime.InteropServices.Marshal.ReleaseComObject(table);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(catlog);
    table = null;
    catlog = null;
    GC.WaitForPendingFinalizers();
    GC.Collect();

    Console.WriteLine("第一次创建");
    Console.ReadKey();

    }
    else
    {
    Console.WriteLine("数据库已存在");
    Console.ReadKey();
    }

  • 相关阅读:
    android05
    android xutils
    android service
    ios 开源代码
    java读properties的通用类,兼容linux和windows
    android adb shell
    清除mysql表中数据
    针对系统中磁盘IO负载过高的指导性操作
    MySQL出现Waiting for table metadata lock的场景浅析
    Sysstat的工具集sar、 iostat、mpstat、sadf、sar、sadc
  • 原文地址:https://www.cnblogs.com/liuxingleiyu/p/6088589.html
Copyright © 2020-2023  润新知