博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML数据库一睹为快
阅读量:5946 次
发布时间:2019-06-19

本文共 4235 字,大约阅读时间需要 14 分钟。

这是我正在开发的XML数据库的一个演示程序片段。该项目目前还不完整,会在合适的时候开源。

有关该数据库的一些介绍,请参考

简单地说,这是一个用XML作为数据存取源的数据库设计方案。完全基于.NET和XML技术,并且使用了LINQ的技术。我自己总结该数据库是:XML+ 面向对象。

  • XML是指其存储格式是XML的
  • 面向对象是指每个表格都映射为一个业务实体(该实体可以很复杂),而且针对数据库的操作完全是面向对象的方式,不用SQL语法
    • 复杂的查询全部可以用LINQ语法来解决。因为数据库方法返回的就是对象类型。

 

大家想想看,如果操作数据库可以像下面这样,是不是也是一个不错的选择呢?如果大家对于XML数据库的开发有兴趣和高见,欢迎给我反馈和讨论

 

using System;using System.Collections.Generic;using XMLDatabase;using DataEntities;using System.Linq;namespace SampleApplication{class Program{static void Main(string[] args){///插入1000个订单约13秒,体积为615KB///插入第2000个订单约41秒,体积为1229KB,///插入第3000个订单约77秒,体积为1933KB//////TODO: 应该考虑 插入、删除、更新的优化。这三种情况应该不要去加载全部的文档,能不能用XMLWriter的方式做///应该考虑类似LINQ TO SQL中的SubmitChange的方式,一次性提交///改进了这个设计之后,插入1000个订单连1秒钟都不需要,太酷了Console.WriteLine("1:创建数据库");using (Database db = Database.CreateInstance("Northwind", "E:\\Temp"))//在E:\Temp目录下面创建一个叫做Northwind的XML数据库{Console.WriteLine("\t成功创建了数据库");#region 创建几个表Console.WriteLine("2:创建表");Table
OrderTable = db.Create
("Orders", new[] { "OrderID" });Table
CustomerTable = db.Create
("Customers", new[] { "CustomerID" });Table
EmployeeTable = db.Create
("Employees", new[] { "EmployeeID" });Console.WriteLine("\t成功创建了三个表");#endregion#region 插入记录Console.WriteLine("3:插入记录");//插入一个订单记录OrderTable.Insert(new Order(){OrderID = 10248,CustomerID = "ABCDEF",OrderDate = DateTime.Now,EmployeeID = 1,OrderItems = new List
(){new OrderItem(){OrderId=10248,Quantity=20,UnitPrice=25,Product=new Product(){ ProductId=1, ProductName="Apple"}}}});OrderTable.Insert(new Order(){OrderID = 10249,CustomerID = "ABCDEF",OrderDate = DateTime.Now,EmployeeID = 1,OrderItems = new List
(){new OrderItem(){OrderId=10249,Quantity=4,UnitPrice=25,Product=new Product(){ ProductId=1, ProductName="Pen"}},new OrderItem(){OrderId=10249,Quantity=2000,UnitPrice=2,Product=new Product(){ ProductId=1, ProductName="Car"}}}});Console.WriteLine("\t成功插入了两笔订单记录");//插入一个客户记录CustomerTable.Insert(new Customer(){CustomerID = "ABCDEF",CompanyName = "Xizhang.com"});Console.WriteLine("\t成功插入了一笔客户记录");EmployeeTable.Insert(new Employee() { EmployeeID = 1, Name = "陈希章", City = City.上海 });Console.WriteLine("\t成功插入了一笔员工记录");db.SubmitChanges();//只有提交了才会真正在数据库中生效Console.WriteLine("\t提交了数据库更改");#endregion#region 读取记录//这里的查询就是标准的LINQ语法//选择订单金额大于1000的订单Console.WriteLine("4:数据查询");var query = from o in OrderTable.Select()where o.OrderItems.Sum(d => d.Quantity * d.UnitPrice) > 1000select o;foreach (var item in query){Console.WriteLine(item);}#endregion#region 更新记录Console.WriteLine("5:更新数据");var customer = CustomerTable.Select().Where(c => c.CustomerID == "ABCDEF").SingleOrDefault();Console.WriteLine("\t修改之前");Console.WriteLine(customer);//进行修改customer.CompanyName = "Microsoft.com";CustomerTable.Update(customer);db.SubmitChanges();Console.WriteLine("\t修改之后");customer = CustomerTable.Select().Where(c => c.CustomerID == "ABCDEF").SingleOrDefault();Console.WriteLine(customer);#endregion#region 删除记录Console.WriteLine("6:删除记录");var order = OrderTable.Select().Where(o => o.OrderID == 10248).SingleOrDefault();Console.WriteLine("\t删除之前");Console.WriteLine("\t" + order);OrderTable.Delete(order);db.SubmitChanges();Console.WriteLine("\t删除之后");order = OrderTable.Select().Where(o => o.OrderID == 10248).SingleOrDefault();if (order == null)Console.WriteLine("\t\t该订单已经不存在");#endregion#region 清空记录Console.WriteLine("7:清空记录");//相当于DELETE * FROM ...Console.WriteLine("\t清空之前");var employee = EmployeeTable.Select().FirstOrDefault();Console.WriteLine("\t" + employee);EmployeeTable.Clear();db.SubmitChanges();employee = EmployeeTable.Select().FirstOrDefault();Console.WriteLine("\t清空之后");if (employee == null)Console.WriteLine("\t\t该员工已经不存在");#endregion#region 删除表格Console.WriteLine("8:删除表格");Console.WriteLine("\t删除之前");Console.WriteLine("\t\t客户表是否存在:{0}", db.Exists("Customers"));db.Drop("Customers");Console.WriteLine("\t删除之后");Console.WriteLine("\t\t客户表是否存在:{0}", db.Exists("Customers"));#endregion}Console.WriteLine("9:删除数据库");Database.DeleteInstance("Northwind", @"E:\Temp");Console.Read();}}}

本文由作者: 于 2009/8/9 18:25:07 发布在: ,转载请注明出处

转载于:https://www.cnblogs.com/jiangwenwen/archive/2012/04/12/2444994.html

你可能感兴趣的文章
php正则匹配utf-8编码的中文汉字
查看>>
MemCache在Windows环境下的搭建及启动
查看>>
linux下crontab实现定时服务详解
查看>>
Numpy中的random模块中的seed方法的作用
查看>>
用java数组模拟登录和注册功能
查看>>
javaScript实现归并排序
查看>>
关于jsb中js与c++的相互调用
查看>>
UVA 122 Trees on the level 二叉树 广搜
查看>>
POJ-2251 Dungeon Master
查看>>
tortoisesvn的安装
查看>>
我是怎么使用最短路径算法解决动态联动问题的
查看>>
URAL 1353 Milliard Vasya's Function DP
查看>>
速读《构建之法:现代软件工程》提问
查看>>
Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
查看>>
django中聚合aggregate和annotate GROUP BY的使用方法
查看>>
TFS简介
查看>>
docker管理平台 shipyard安装
查看>>
安装django
查看>>
Bootstrap3 栅格系统-简介
查看>>
ADODB类库操作查询数据表
查看>>