第一次写博客,写的不好请见谅。
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.这里就写完了 希望能够有所帮助。当然有什么建议,可以留言,我想做得更好。
原文链接:https://www.f2er.com/xml/297631.html