开源SmallData轻量数据访问组件
2008-07-12 15:39
495 查看
这个组件是从NClay.Data基础功能分离出来,主要功能以下功能:一致的数据库访问方式,基于接口的数据库提供者扩展,基于线程的连接对象句柄可以简单实现跨方法的数据库事务处理能力;组件配备6个数据库连接设置通过DBContext的不同版本的Region方法来进行不同数据库操作。
组件才用Apache License 2.0协议。
辅助工具:迟下将会提供一个Code Generator用于实现简单描述XML生成基于组件的Entity数据操作方式,在代码例程用使用该Code Generator的简单测试(由于这东西并不是组件必须,所以暂时不提供;不过有需要的朋友可以联系我)
组件结构和处理图
普通代码操作方式
DBContext.Region(e => {
Command cmd = new Command("select * from employees");
Console.WriteLine("Select Employee:");
using (IDataReader reader = e.ExecuteReader(cmd))
{
while (reader.Read())
{
Console.WriteLine("\t"+reader["firstname"]);
}
}
Console.WriteLine("Select Orders:");
cmd = new Command("select * from orders");
using (IDataReader reader = e.ExecuteReader(cmd))
{
while (reader.Read())
{
Console.WriteLine("\t" + reader["orderid"] +"\t" + reader["orderdate"]);
}
}
cmd = new Command("select * from orders where orderdate >=@p1 and orderdate<@p2");
cmd.AddParameter("p1", "1996-1-1");
cmd.AddParameter("p2", "1997-1-1");
using (IDataReader reader = e.ExecuteReader(cmd))
{
while (reader.Read())
{
Console.WriteLine("\t" + reader["orderid"] + "\t" + reader["orderdate"]);
}
}
});
基于Code Generator的操作方式
DBContext.Region(e =>
{
int id;
WhereBody exp;
Employees emp = Employees.Load(e, 3);
Console.WriteLine(emp.FirstName +"\t" + emp.LastName);
emp.LastName = "henry";
emp.Save(e);
emp = Employees.Load(e, 3);
Console.WriteLine(emp.FirstName + "\t" + emp.LastName);
emp = new Employees();
emp.FirstName = "fan";
emp.LastName = "henry";
emp.Save(e);
id = emp.EmployeeID;
emp = Employees.Load(e,id);
Console.WriteLine(emp.FirstName + "\t" + emp.LastName);
emp.Delete(e);
emp = Employees.Load(e, id);
Console.WriteLine(emp == null);
IList<CountOrderByMonth> items = CountOrderByMonth.List(e, null, null, null);
foreach(CountOrderByMonth item in items)
{
Console.WriteLine(item.Year.ToString("0000")+item.Month.ToString("00") + ":\t" + item.Count);
}
exp = new WhereBody();
exp.AddExpression("Employeeid =@p1");
exp.AddParameter("p1", 3);
items = CountOrderByMonth.List(e, exp, null, null);
foreach (CountOrderByMonth item in items)
{
Console.WriteLine(item.Year.ToString("0000") + item.Month.ToString("00") + ":\t" + item.Count);
}
});
[b]下载组件源代码
Code Generator演示[/b]
组件才用Apache License 2.0协议。
辅助工具:迟下将会提供一个Code Generator用于实现简单描述XML生成基于组件的Entity数据操作方式,在代码例程用使用该Code Generator的简单测试(由于这东西并不是组件必须,所以暂时不提供;不过有需要的朋友可以联系我)
组件结构和处理图
普通代码操作方式
DBContext.Region(e => {
Command cmd = new Command("select * from employees");
Console.WriteLine("Select Employee:");
using (IDataReader reader = e.ExecuteReader(cmd))
{
while (reader.Read())
{
Console.WriteLine("\t"+reader["firstname"]);
}
}
Console.WriteLine("Select Orders:");
cmd = new Command("select * from orders");
using (IDataReader reader = e.ExecuteReader(cmd))
{
while (reader.Read())
{
Console.WriteLine("\t" + reader["orderid"] +"\t" + reader["orderdate"]);
}
}
cmd = new Command("select * from orders where orderdate >=@p1 and orderdate<@p2");
cmd.AddParameter("p1", "1996-1-1");
cmd.AddParameter("p2", "1997-1-1");
using (IDataReader reader = e.ExecuteReader(cmd))
{
while (reader.Read())
{
Console.WriteLine("\t" + reader["orderid"] + "\t" + reader["orderdate"]);
}
}
});
基于Code Generator的操作方式
DBContext.Region(e =>
{
int id;
WhereBody exp;
Employees emp = Employees.Load(e, 3);
Console.WriteLine(emp.FirstName +"\t" + emp.LastName);
emp.LastName = "henry";
emp.Save(e);
emp = Employees.Load(e, 3);
Console.WriteLine(emp.FirstName + "\t" + emp.LastName);
emp = new Employees();
emp.FirstName = "fan";
emp.LastName = "henry";
emp.Save(e);
id = emp.EmployeeID;
emp = Employees.Load(e,id);
Console.WriteLine(emp.FirstName + "\t" + emp.LastName);
emp.Delete(e);
emp = Employees.Load(e, id);
Console.WriteLine(emp == null);
IList<CountOrderByMonth> items = CountOrderByMonth.List(e, null, null, null);
foreach(CountOrderByMonth item in items)
{
Console.WriteLine(item.Year.ToString("0000")+item.Month.ToString("00") + ":\t" + item.Count);
}
exp = new WhereBody();
exp.AddExpression("Employeeid =@p1");
exp.AddParameter("p1", 3);
items = CountOrderByMonth.List(e, exp, null, null);
foreach (CountOrderByMonth item in items)
{
Console.WriteLine(item.Year.ToString("0000") + item.Month.ToString("00") + ":\t" + item.Count);
}
});
[b]下载组件源代码
Code Generator演示[/b]
相关文章推荐
- 开源数据访问组件Smark.Data 1.8
- 开源数据访问组件DAC
- 【开源】自己用的数据访问组件及一些小东西,发扬博客园分享精神
- 开源Silverlight数据访问组件System.Data.Silverlight使用教程
- 开源数据访问组件Smark.Data 1.8入门编
- [.Net开源分享]DataProvider便捷数据访问组件
- 开源数据访问组件Smark.Data 1.7新增功能
- Firebird 数据访问组件 (Delphi)
- 发布NBearLite v1.0.0: 提供强类型查询语法的非ORM数据访问组件 [8/2 更新至v1.0.0.9 beta - 修复NBearLite参考手册某些操作系统打开错误的问题]
- 走火入魔.NET权限组件-字段访问权限(数据表字段的访问权限)思想来解决数据列的权限控制需求
- 写一个通用数据访问组件
- CYQ.Data 轻量数据层之路 优雅V1.4版本 框架开源
- 关于OWC11组件访问AS数据的权限问题
- .net中利用oracle产品自带的数据访问组件(Oracle.DataAccess.dll)提升批量更新操作的执行效率
- 走火入魔.NET权限组件-字段访问权限(数据表字段的访问权限)思想来解决数据列的权限控制需求
- ASP.NET中使用开源组件NPOI快速导入导出Execl数据
- asp.net--数据访问组件模型
- 测试 ClownFish、CYQ、Entity Framework、Moon、MySoft、NHibernate、PDF、XCode数据访问组件性能
- DataRabbit 轻量的数据访问框架(01) -- ITransactionAccesser
- DataRabbit 轻量的数据访问框架(02) -- IOrmAccesser