由于在程序中使用了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();
}

c#创建access数据库和数据表的更多相关文章

  1. ASP入门(二)-创建Access数据库

    通常来说,ASP程序是搭配Access数据库来使用的,因此在安装完ASP环境后,为了方便建立和管理数据库,我们还需要安装Access数据库. Access是Microsoft Office家族中的一员 ...

  2. 创建ACCESS数据库,并且创建表和数据。重点:关闭ACCESS数据库引用

    /// <summary> /// 创建ACCESS数据库,并且创建表和数据 /// </summary> /// <param name="dictTable ...

  3. 用SQL语句创建和删除Access数据库中的表;添加列和删除列

    用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...

  4. C#中动态创建数据库和数据表,很经典【转】

    用ADOX创建access数据库方法很简单,只需要new一个Catalog对象,然后调用它的Create方法就可以了,如下: ADOX.Catalog catalog = new Catalog(); ...

  5. 数据库、数据表的创建SP2

      本人前一个版本的数据库.数据表的创建由于不是很详细,于是通过细心的修订,已经修复了很多Bug,希望这篇文章能够给大家一些帮助 --代表注释,相当于C#里的// --切换到master数据库,目的是 ...

  6. sql server2008中怎样用sql语句创建数据库和数据表

    这是简单用代码实现创建数据库和数据表的sql语句,如下: --调用系统数据库-- use master go /***防止你要创建的数据库同名,先把它删除掉****/ if Exists(select ...

  7. C# 利用mysql.data 在mysql中创建数据库及数据表

    C# 利用mysql.data 在mysql中创建数据库及数据表 using System; using System.Collections.Generic; using System.Linq; ...

  8. 如何用C# 动态创建Access数据库和表?

    记得以前要动态的创建Access数据库的mdb文件都是采用DAO,用VC开发,一大堆的API,很是麻烦.而且以前工作中需要全新的access数据库,可以复制数据库,也可以把新的数据库放到资源里面,用新 ...

  9. 向ACCESS数据库中的表导入EXCEL表,在 System.Data.OleDb.OleDbException 中第一次偶然出现的“System.Data.dll”类型的异常

    向ACCESS数据库中的表导入EXCEL表,EXCEL表Sheet1中与ACCESS数据库表中的关键字对应的列的值,不能与数据库中表的主键项值重复,不然就会出现 在 System.Data.OleDb ...

随机推荐

  1. python3学习笔记(1)

    一.模块初识(接上篇)模块(库)分为两种:1.标准库:不需要安装直接可以导入的库,例:getpass.2.第三方库:必须要下载安装才可以使用.注:编辑的模块文件名不能与导入的模块名重复. 在模块文件中 ...

  2. Maven创建父子工程(简单、完整)

    Eclipse创建Maven父子工程(书中有的叫聚合工程,因为看了网上很多教程,实际操作总会有这样那样的小问题,有时候包结构还不对,创建成功后索性就自己写一篇帮助小白,有不对请指教) 1 file-n ...

  3. .net 系列:Expression表达式树、lambda、匿名委托 的使用

    首先定义一个泛型委托类型,如下: public delegate T Function<T>(T a, T b); 实现泛型委托的主体代码,并调用: public static strin ...

  4. MVC过滤器简单理解

    之前对于MVC过滤器的理解一直处于很模糊的状态,就在网上找了一些很简单的案例做了一下学习,就找了一个比较容易理解的demo分享给大家. 新建一个MVC4项目,可以在global.asax文件中看到如下 ...

  5. EntityFramework For Mysql 动态切换数据源

    1.简介 在工作中遇到一个问题.项目有三个数据库(三个数据库表结构一样),用户可以选择使用哪个数据库.其实就是动态切换数据库连接. 2.EntityFramework For Mysql 先来简单的介 ...

  6. Python带参数的装饰器

    在装饰器函数里传入参数 # -*- coding: utf-8 -*- # 2017/12/2 21:38 # 这不是什么黑魔法,你只需要让包装器传递参数: def a_decorator_passi ...

  7. Python将纳入高考?

    最近,"Python将纳入高考"的消息,狠狠地刷了朋友圈. 尽管这则消息目前还未得到官方的确认,但人们对于Python的火热关注度,还是引来众程序员热议. 虽然小编资历尚浅,但还是 ...

  8. 在Github上面搭建一个自己域名的Hexo博客

    前言 在一次看到别人的博客主页,觉得设计很漂亮.但是由于自己对于前台这块没什么办法,煞是羡慕.偶然中发现这种样式是在Github上面搭建的,使用的是Next主题.于是便想自己也搭建一个,于是便去就去查 ...

  9. 利用模板template动态渲染jsp页面

    一.场景 在js中写html简直是噩梦,刚进新公司,在codereview的时候得知可以通过将html模板写在jsp页面,然后由js调取模板,利用replace()方法替换传值的方式避免在js中拼接h ...

  10. oracle恢复已删除的表

    drop 误删除表之后使用flashback table tablename to before drop 可恢复或者使用flashback table "BIN$gcfME7ObTx+n0 ...