最近在用C#做一个时间管理系统,需要用到数据库。但由于之前都没有接触过C#,以至于走了很多弯路,所以做完之后顺便在这里记录一下。一来可以使自己养成写文档的习惯,二来也可以帮助到后面学习C#的朋友,可谓两全其美。
一.安装AccessDatabaseEngine驱动程序
为了创建并能够打开Access (以上版本的Access文件后缀名为.accdb)以上版本的数据库文件,我们在创建的时候需要用到Microsoft.ACE.OLEDB.12.0,所以这里我们得先安装一下AccessDatabaseEngine.exe这个应用程序。AccessDatabaseEngine可以在它的官网上下载到:
/zh-cn/download/details.aspx?id=23734
二.创建Access数据库文件
安装完AccessDatabaseEngine驱动程序后,接下来我们可以正式开始创建Access数据库文件了。
1.在项目引用中增加COM组件:MicrosoftADO Ext.6.0 for DDL and Security
2. usingADOX;
using System.IO; //DirectoryInfo需要用到using ADOX; //创建数据库需要using System.Data.OleDb; //连接Access数据库
3. 在窗体加载方法中创建数据库文件
ADOX.Catalog catalog = new Catalog();/* Microsoft.ACE.OLEDB.12.0 可以打开以及07以上版本的Access数据库文件 *//* Microsoft.ACE.OLEDB.12.0需要安装额外的应用(AccessDatabaseEngine.exe)才能支持 */string connStr = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath);try{catalog.Create(connStr);}catch (Exception ex){MessageBox.Show(ex.Message);}
三.在创建好的数据库文件中添加表
创建表之前需要先连接数据库,需要添加引用 Microsoft ActiveX Data Object x.x(我用的是6.0) Library。using System.Data.OleDb; //连接Access数据库
/* 创建表之前需要先连接数据库 *///需要添加引用 Microsoft ActiveX Data Object x.x(我用的是6.0) LibraryADODB.Connection cn = new ADODB.Connection();try{cn.Open(connStr, null, null, -1);}catch (Exception ex){MessageBox.Show(ex.Message);}catalog.ActiveConnection = cn;/* 建立新表 *//* 序号 日期 起始时间 终止时间 时长 时间类别 事项 成就值 */ADOX.Table table = new ADOX.Table();table.Name = "DailyRecord"; //表名ADOX.Column idColumn = new ADOX.Column();//创建列idColumn.ParentCatalog = catalog;idColumn.Type = ADOX.DataTypeEnum.adInteger; //整型idColumn.Name = "序号"; //列名idColumn.DefinedSize = 32;idColumn.Properties["AutoIncrement"].Value = true; //自动增长table.Columns.Append(idColumn);//向表中添加列table.Keys.Append("FirstTablePrimaryKey", KeyTypeEnum.adKeyPrimary, idColumn, null, null); //设置主键table.Columns.Append("日期", DataTypeEnum.adDate, 0);table.Columns.Append("起始时间", DataTypeEnum.adSingle, 0);table.Columns.Append("终止时间", DataTypeEnum.adSingle, 0);table.Columns.Append("时长", DataTypeEnum.adInteger, 0);table.Columns.Append("时间类别", DataTypeEnum.adWChar, 0);table.Columns.Append("事项", DataTypeEnum.adWChar, 0);table.Columns.Append("成就值", DataTypeEnum.adInteger, 0);//将创建的表添加进数据库try{catalog.Tables.Append(table);}catch (Exception ex){MessageBox.Show(ex.Message);}/* 关闭数据库连接 */cn.Close();MessageBox.Show("成功创建表 DailyRecord");