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";
   string dbName = "D:/DataBase/FirstTable.mdb";  ADOX.CatalogClass catlog = new ADOX.CatalogClass();
    ADOX.CatalogClass catlog = new ADOX.CatalogClass();  //或者  ADOX.Catalog  catlog = new ADOX.Catalog();  CatalogClass 是类 ,Catalog是接口 。
    //或者  ADOX.Catalog  catlog = new ADOX.Catalog();  CatalogClass 是类 ,Catalog是接口 。  catlog .Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbName + ";"+"Jet OLEDB:Engine Type=5");
    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();
 ADOX.TableClass tbl = new ADOX.TableClass(); // 或者 ADOX.Table  tbl = new ADOX.Table();  tbl.ParentCatalog = catlog; //数据库名
    tbl.ParentCatalog = catlog; //数据库名  tbl.Name = "MyTable";
    tbl.Name = "MyTable"; 
Table的属性:
- 使用 Name 属性标识表。
- 使用 Type 属性确定表的类型。
- 使用 Columns 集合访问表的数据库列。
- 使用 Indexes 集合访问表的索引。
- 使用 Keys 集合访问表的关键字。
- 使用 ParentCatalog 属性指定拥有表的 Catalog。 
 Columns 对象 :
 我们可以用以下语句创建列:
![]() ADOX.ColumnClass FirstCol = new ADOX.ColumnClass(); ADOX.ColumnClass FirstCol = new ADOX.ColumnClass();![]() FirstCol.ParentCatalog = catlog; FirstCol.ParentCatalog = catlog;![]() FirstCol.Type = ADOX.DataTypeEnum.adInteger; FirstCol.Type = ADOX.DataTypeEnum.adInteger;![]() FirstCol.Name = "StuID"; FirstCol.Name = "StuID";![]() FirstCol.Properties["Jet OLEDB:Allow Zero Length"].Value = false; FirstCol.Properties["Jet OLEDB:Allow Zero Length"].Value = false;![]() FirstCol.Properties["AutoIncrement"].Value = true; FirstCol.Properties["AutoIncrement"].Value = true;![]() tbl.Columns.Append(FirstCol, ADOX.DataTypeEnum.adInteger, 0); 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这样累加,不需要你赋值就行。
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();
            }
 
                    
                
 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号