Xqk.Data数据框架使用说明之:一个简单的示例
该例子建立了一个Person的实体类,该实体类与数据表person关联,通过Person对象就可以实现对数据表person的操作。
- 通过Visual Studio创建一个WinForm项目XqkDataDemo1;
- 把Xqk.Data.dll复制到项目中;把数据库连接库复制到项目中(本例用SqlLite,需要把System.Data.SqlLite.dll复制到项目中);
- 创建一个实体类Person;代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using Xqk.Data;namespace XqkDataDemo1
{public class Person
{
[DbField]
public string Name { get; set; }[DbField]
public bool IsMale { get; set; }[DbField]
public int Height { get; set; }[DbField]
public double Weight { get; set; }[DbField]
public DateTime Birthday { get; set; }
public int Age
{
get
{
return 1+ DateTime.Now.Year - Birthday.Year;
}
}}
}正如上述代码所示,为了让一个实体类与一张数据表关联,仅需在实体类的属性中添加DbField特性。
DbField特性使得实体类的属性与数据表列对应起来,关于这种对应关系,以后会详尽描述。
- 在Visual Studio创建的默认窗体Form1中添加一个名为listview1的列表控件和一个名为AddButton的按钮控件;
- 在Form1的代码中引入Xqk.Data命名空间,并在Form1代码中添加一个DbTable<T>字段:
using Xqk.Data;
namespace XqkDataDemo1
{
public partial class Form1 : Form
{
DbTable<Person> _DbtPerson;......
}
}
-
在Form1的Load代码中连接数据库并初始化刚才创建的_DbtPerson字段:
private void Form1_Load(object sender, EventArgs e)
{
DbConnector db = DbConnector.SQLite("E: empdemo1.db");
//DbConnector db = DbConnector.MySQL("localhost", "root", "123", "test");_DbtPerson = db.GetTable<Person>();
_DbtPerson.EnsureExist();ShowAllPersons();
}使用DbConnector为特定数据库系统提供的静态函数来连接数据库。本例使用SQLite数据库,则使用下DbConnector的下列静态函数连接:
public static DbConnector SQLite(string datasrc);
如果数据库系统使用MySQL,则用:
public static DbConnector MySQL(string server, string userid, string password, string dbname);
事实上,DbConnector类为不同数据库系统还提供使用数据库连接字符串连接的版本。
用DbConnector实体对象的GetTable<T>方法为数据表与实体类建立关联:
public DbTable<T> GetTable<T>() where T : class, new()
该方法绑定的数据表名称,默认为实体类名的小写形式,在本示例中,数据表的名称为实体类名称Person的小写形式person;
DbTable<T>的实体对象方法EnsureExist表示当数据表不存在时,自动建立该数据表。在本例中,如果E: emp目录下不存在demo1.db文件,当_DbtPerson.EnsureExist();运行后,会自动建立demo1.db文件,并创建名为person的数据表,含有name, ismale, height,weight, birthday共5个数据列。
初始化数据表后,把数据表中的数据显示在列表中
- 用DbTable<T>的实体对象方法SelectAll方法从关联的数据表中读取所有数据到实体对象数组:
public T[] SelectAll();
显示Person列表的方法如下:
private void ShowAllPersons()
{
listView1.Items.Clear();
listView1.BeginUpdate();
foreach(Person person in _DbtPerson.SelectAll())
{
ListViewItem lvi = new ListViewItem(person.Name);
lvi.SubItems.Add(person.IsMale ? "男" : "女");
lvi.SubItems.Add(person.Height.ToString());
lvi.SubItems.Add(person.Weight.ToString());
lvi.SubItems.Add(person.Birthday.ToString("yyyy-MM-dd"));
lvi.SubItems.Add(person.Age.ToString());listView1.Items.Add(lvi);
}
listView1.EndUpdate();
} - 为AddButton添加click事件处理方法,在该方法中弹出一个新建Person的对话框,给对话框返回DialogResult.OK时,表明用户输入了一个有效的Person数据,然后用DbTable<T>的实体对象方法Insert把该实体对象添加到关联的数据表中:
private void AddButton_Click(object sender, EventArgs e)
{
PersonDetailForm f = new PersonDetailForm();
f._Person = null;
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
_DbtPerson.Insert(f._Person);
ShowAllPersons();
}
}