加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用xml数据库-by XmlDatabase

发布时间:2020-12-16 06:35:56 所属栏目:百科 来源:网络整理
导读:第一次写博客,写的不好请见谅。 1.进入http://xmldatabase.codeplex.com/ 下载dll文件和demo 2.在这里我是自己写了一个类包装使用xmldatabase 3.按照数据库操作的习惯,增删改查,批量增删改查,这个就是目前包装类,其实我主要还是参考demo写的,上代码。

第一次写博客,写的不好请见谅。

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.这里就写完了 希望能够有所帮助。当然有什么建议,可以留言,我想做得更好。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读