第一次写博客,写的不好请见谅。
1.进入http://xmldatabase.codeplex.com/ 下载dll文件和demo
2.在这里我是自己写了一个类包装使用xmldatabase
3.按照数据库操作的习惯,增删改查,批量增删改查,这个就是目前包装类,其实我主要还是参考demo写的,上代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using XmlDatabase.Core;
using System.Web;
using System.Linq.Expressions;
namespace DBUtility
{
/// <summary>
/// XML数据库访问基础类
/// Copyright (C) 2014-2015 mofijeck
/// All rights reserved
/// </summary>
public class DbHelperXML
{
private string filePath = "";
/// <summary>
/// 若不指定filePath 则默认创建xml数据库
/// </summary>
public DbHelperXML()
{
}
public DbHelperXML(string filePath)
{
string xmlFolder = HttpContext.Current.Request.MapPath("~/" + filePath);
this.filePath = xmlFolder;
}
#region 增加
public void Add<T>(T data) {
//打开或者创建
using (XDatabase db = XDatabase.Open(filePath))
{
db.Store(data, true);//只要调用该方法就可以了。默认情况下,这是立即生效的
db.Close();
}
}
public void Add<T>(List<T> list) {
using (XDatabase db = XDatabase.Open(filePath))
{
//首先得将数据库的模式切换到批处理模式
db.AutoSubmitMode = false;
foreach (T t in list)
{
db.Store(t);//语法还是一模一样的
}
//区别在于,如果是批处理模式,则必须明确地调用SubmitChanges才生效
XSubmitStatus status = db.SubmitChanges();
//这个SubmitChanges方法默认情况下,如果遇到某个操作出错,那么后面的操作就不会进行了。
//如果希望出错后继续,那么应该使用下面的语法
//XSubmitStatus status=db.SubmitChanges(true);
//第八步:事务性操作
//要进行事务性操作,必须处于批处理模式中。我最后将它做了简化,调用下面的方法即可
//XSubmitStatus status = db.SubmitChangesWithTransaction();
//第九步:关闭数据库
db.Close();
}
}
#endregion
#region 更新
public void Update<T>(T data)
{
//打开或者创建
using (XDatabase db = XDatabase.Open(filePath))
{
db.Store(data, true);//只要调用该方法就可以了。默认情况下,这是立即生效的
db.Close();
}
}
public void Update<T>(List<T> list)
{
using (XDatabase db = XDatabase.Open(filePath))
{
//首先得将数据库的模式切换到批处理模式
db.AutoSubmitMode = false;
foreach (T t in list)
{
db.Store(t);//语法还是一模一样的
}
//区别在于,如果是批处理模式,则必须明确地调用SubmitChanges才生效
XSubmitStatus status = db.SubmitChanges();
//这个SubmitChanges方法默认情况下,如果遇到某个操作出错,那么后面的操作就不会进行了。
//如果希望出错后继续,那么应该使用下面的语法
//XSubmitStatus status=db.SubmitChanges(true);
//第八步:事务性操作
//要进行事务性操作,必须处于批处理模式中。我最后将它做了简化,调用下面的方法即可
//XSubmitStatus status = db.SubmitChangesWithTransaction();
//第九步:关闭数据库
db.Close();
}
}
#endregion
#region 删除
public void Delete<T>(Func<T, bool> whereQuery)
{
//打开或者创建
using (XDatabase db = XDatabase.Open(filePath))
{
object t = this.QueryTop<T>(whereQuery);
db.Delete(t);
db.Close();
}
}
public void DeleteProcess<T>(Func<T, bool> whereQuery)
{
//打开或者创建
using (XDatabase db = XDatabase.Open(filePath))
{
List<T> t = this.Query<T>(whereQuery,0);
this.Delete(t);
db.Close();
}
}
public void Delete<T>(T t) {
//打开或者创建
using (XDatabase db = XDatabase.Open(filePath))
{
db.Delete(t);
db.Close();
}
}
public void Delete<T>(List<T> list)
{
//打开或者创建
using (XDatabase db = XDatabase.Open(filePath))
{
//首先得将数据库的模式切换到批处理模式
db.AutoSubmitMode = false;
foreach (T t in list)
{
db.Delete(t);//语法还是一模一样的
}
//区别在于,如果是批处理模式,则必须明确地调用SubmitChanges才生效
XSubmitStatus status = db.SubmitChanges();
//这个SubmitChanges方法默认情况下,如果遇到某个操作出错,那么后面的操作就不会进行了。
//如果希望出错后继续,那么应该使用下面的语法
//XSubmitStatus status=db.SubmitChanges(true);
//第八步:事务性操作
//要进行事务性操作,必须处于批处理模式中。我最后将它做了简化,调用下面的方法即可
//XSubmitStatus status = db.SubmitChangesWithTransaction();
//第九步:关闭数据库
db.Close();
}
}
#endregion
#region 查询
/// <summary>
/// 查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="whereQuery"></param>
/// <param name="top">0表示返回所有</param>
/// <returns></returns>
public List<T> Query<T>(Func<T, bool> whereQuery,int top)
{
using (XDatabase db = XDatabase.Open(filePath))
{
db.Query<T>();
var query = from o in db.Query<T>().Where(whereQuery)
select o;
db.Close();
if (top == 0)
{
return query.ToList();
}
else {
return query.Take(top).ToList();
}
}
}
public T QueryTop<T>(Func<T, bool> whereQuery) {
using (XDatabase db = XDatabase.Open(filePath))
{
db.Query<T>();
var query = from o in db.Query<T>().Where(whereQuery)
select o;
db.Close();
return query.FirstOrDefault();
}
}
#endregion
}
}
4.调用方法(使用DataEntities.dll demo里面有 其实就是model类)
DBUtility.DbHelperXML xmldb = new DbHelperXML("xmldb/test");
Customer customer = new Customer()
{
CustomerID = "ALFKI",
CompanyName = "Alfreds Futterkiste",
Country = "Germany",
Region = "BC",
City = "Berlin",
ContactName = "Maria Anders",
Address = "Obere Str. 57"
};
Employee employee = new Employee()
{
EmployeeId = 1,
FirstName = "Nancy",
LastName = "Davolio",
Title = "Sales Representative"
};
Product product = new Product()
{
ProductId = 1,
ProductName = "Chai"
};
Order order= new Order()
{
OrderID = 10248,
OrderDate = DateTime.Now.AddYears(5),
Customer = customer,
Employee = employee,
OrderItems = new List<OrderItem>()
{
new OrderItem(){
Product=product,
UnitPrice=20.5m,
Quantity=5
},
new OrderItem(){
Product=new Product(){
ProductId=2,
ProductName="Grandma's Boysenberry Spread"},
UnitPrice=333,
Quantity=1
}
}
};
xmldb.Add(order);
Order o1 = xmldb.QueryTop<Order>(n => n.OrderID == 10248);
o1.OrderDate = o1.OrderDate.AddYears(20);
xmldb.Update(o1);
5.生成的文件夹如图
6.这里就写完了 希望能够有所帮助。当然有什么建议,可以留言,我想做得更好。