项目中用到Access数据库,之前用的普通Ado.Net 三层。遇到表字段叫多时,就比较费力。想要使用ORM,无奈EF不支持Access。虽然可以改写linq to sql为Linq to Access,多多少少会有些兼容性的问题。这有个demo:http://www.cnblogs.com/wangjikun3/archive/2009/06/20/1507175.html
这里推荐个ORM框架,DbEntry.Net.官网地址:http://dbentry.codeplex.com/
轻量级,高性能,免费开源。支持C#,Visual Basic,ASP.Net.也提供 DbEntryDataSource for ASP.NET 2.0和Rails风格 MVC框架和 简单的Ioc 框架.支持Access(03,07),SqlServer(2000,2005,2008),Excel,MySql,Sqlite,Oracle,Firebird,PostgreSQL.
官网文档:http://dbentry.codeplex.com/documentation
一.安装和简单使用
1.首先下载DbEntry.Net安装程序。官网下载:http://dbentry.codeplex.com/releases/view/79532 金山网盘:http://www.kuaipan.cn/file/id_226427209806521434.htm?source=1
安装之后,打开VS,工具→扩展管理器→已安装的扩展→模板,启用DbEntryClassLibrary.
如果不希望安装模板可以下载bin.zip。官网下载:http://dbentry.codeplex.com/releases/view/79532 金山网盘:http://www.kuaipan.cn/file/id_226427209806521433.htm?source=1
2.新建项目,点击Visual C#,选择DbEntryClassLibrary,输入项目名确定。会默认创建一个User类。删除我们创建个Student类。
未安装模板需要引用dll:Lephone.Core.dll Lephone.Data.dll Lephone.Extra.dll Lephone.Web.dll
public class Student : DbObjectModel<Student> { public string StuName { get; set; } public int StuAge { get; set; } }
3.新建Winform项目,添加对DbEntryClassLibrary项目引用。
添加app.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="Lephone.Settings" type="Lephone.Core.Setting.NameValueSectionHandler, Lephone.Core" /> </configSections> <Lephone.Settings> <add key="AutoCreateTable" value="true" /> <add key="DataBase" value="@Access : @C:\test.mdb" /> </Lephone.Settings> <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>
新建窗体。一个DataGridView,两个TextBox,两个Button。DataGridView新建三个Column。
窗体Load事件加载:
private void Form1_Load(object sender, EventArgs e) { RefreshData(); } /// <summary> /// 刷新数据 /// </summary> private void RefreshData() { dataGridView1.DataSource = Student.Find(Condition.Empty); }
保存按钮:
/// <summary> /// 保存事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSave_Click(object sender, EventArgs e) { if (btnSave.Tag != null && btnSave.Tag.ToString() != String.Empty) { Student stu = Student.FindById(int.Parse(btnSave.Tag.ToString())); int age = 0; int.TryParse(txtStuAge.Text, out age); stu.StuAge = age; stu.StuName = txtStuName.Text; DbEntry.Save(stu); } else { int age = 0; int.TryParse(txtStuAge.Text, out age); Student stu = new Student() { StuAge = age, StuName = txtStuName.Text }; DbEntry.Save(stu); } RefreshData(); }
选择行事件:
/// <summary> /// 选择行事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { DataGridViewRow dr = this.dataGridView1.Rows[e.RowIndex]; btnSave.Tag = dr.Cells["ID"].Value; txtStuName.Text = dr.Cells["Name"].Value.ToString(); txtStuAge.Text = dr.Cells["Age"].Value.ToString(); } }
删除按钮事件:
/// <summary> /// 删除代码 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDelete_Click(object sender, EventArgs e) { if (btnSave.Tag != null && btnSave.Tag.ToString() != String.Empty) { Student.DeleteBy(t => t.Id == int.Parse(btnSave.Tag.ToString())); } RefreshData(); }
源代码下载:金山网盘:http://www.kuaipan.cn/file/id_226427209806521436.htm?source=1