关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » SQL语言 »SQL Artisan数据库访问组件功能概述(1)

    SQL Artisan数据库访问组件功能概述(1)

    2015-11-24 00:00:00 出处:ITJS
    分享

    SQL Artisan现有的版已经在项目中运用,在使用的过程中得到的效果相当理想.刚接触这个组件的几个新同事通过了解已有例子,很快就能适应到项目开发过程中.组件的对象操作和编译检测大提高了编写效率,在项目中得到的效果自己也有点意想不到.

    SQL Artisang下一个版本的功能主完善在表对象操作和对象映射方面;包括:表对象支持数据操作,对象继承,视图对象映射,统计对象映射等.为了让组件功能扩展更方便,把组件的数据映射方式进行重构,由原来的XML描述改成Attribute;并把相关应映射成员搬迁到HFSoft.Data.Mapping名称空间下.以下描述只是组件在新版本中具备的功能,大部分还在实现过程。

    表对象的数据操作

    新版本表对象(Table)由Expressions名称间搬迁到Mapping名称空间下.旧版本的表对象只支持表的关联操作功能比较单一.在功能完善后会支持数据的新增、删除、修改和查询操作。在程序中可以通过以下方式定义表和字段的对象:

    Table tbl = new Table("Employees");
    
    NumberField field = new NumberField("EmployeeID");

    数据新增:

    Employees.TBL.Insert(
    
             Employees._FirstName.Set("Fan"),
    
             Employees._LastName.Set("Henry"),
    
             Employees._BirthDate.Set(DateTime.Parse("1979-1-1"))
    
             );

    数据修改:

    Employees.TBL.Update(Employees._FirstName =="Fan",
    
             Employees._City.Set("GuangZhou"),
             Employees._Address.Set("TianHe"),
             Employees._Region.SetNull());

    数据删除:

    Employees.TBL.Delete(Employees._FirstName =="Fan");

    数据查询:

    System.Collections.IList lst = Orders.TBL.Where(
    
             Orders._OrderDate >= DateTime.Parse("1997-1-1")&
    
             Orders._OrderDate < DateTime.Parse("1997-8-1")
    
             ).SelectObject();
    
         foreach(Orders item in lst)
    
         {
             Console.WriteLine(item.OrderID);
         }

    统计查询:

    System.Data.DataSet ds = Orders.TBL.INNER(OrderDetails.TBL,OrderDetails._OrderID)
    
             .Where(Orders._OrderDate >= DateTime.Parse("1997-8-1"))
    
             .OrderBy(Orders._EmployeeID.DESC)
    
             .GroupBy(Orders._EmployeeID)
    
         .Select(SqlMath.Sum(OrderDetails._Quantity*OrderDetails.
    _UnitPrice*(1-OrderDetails._Discount)).As("account"),Orders._EmployeeID);
    
         foreach(System.Data.DataRow row in ds.Tables[0].Rows)
    
         {
             Console.WriteLine(row["account"]);
         }

    对象继承

    这里的对象继承只是描述对象映射继承关系,通常用于后面所描述的视图对象。在数据查询过程中有经常要获取关联表的某些字段信息;如:在查询订单里需要获取相关雇员的姓名和客户名称,雇员和客户的其他信息是不需要的;这个时候可以继承订单类实现一个新的映射类。

    [Table("",TableType.View)]
    
         public class OrderView:Orders
         {
    
            [ViewColumn("Employees","FirstName")]
             public string EmpFirstName
    
             {
               get;
    
                 set;
    
             }
    
             [ViewColumn("Employees","LastName")]
             public string EmpLastName
    
             {
                  get;
                  set;
    
            }
             [ViewColumn("Customers","CompanyName")]
    
             public string CompanyName
    
             {
                  get;
    
                 set;
    
             }
         }
         System.Collections.IList lst 
             = (Orders.TBL.INNER(Employees.TBL,Employees._EmployeeID)&
               Orders.TBL.INNER(Customers.TBL,Customers._CustomerID))
             . SelectObject (typeof(OrderView));

    通过以上对象的映射,组件不会加载多余的字段信息,从而获取更好的加载效率。这里有一个比较关心的问题就是OrderView是否能进行数据更新操作?在上的例子中OrderView是可以进行更新操作的,但只是会更新父类Orders映射部分其他部分不作更新。在操作过程中组件会验测对象的基类(一直找到最顶层),假如检测对象不是由表对象派生下来就不会进行任何更新操作并抛操作异常。

    视图对象

    视图对象类似数据库中的视图,通过自定义视图对象可以选择性地映射相关字段信息,很多时候映射表的所有字段过于臃肿;视图对象也可能通过表对象派生下来。以下通过视图对象获取雇员的编号和姓名:

    [Table("",TableType.View)]
    
         public class EmployeeView
    
         {
             [ViewColumn("","EmployeeID")]
             public int ID
    
             {
                  get;
    
                  set;
    
             }
    
             [ViewColumn("","FirstName+LastName")]
    
             public string Name
    
             {
    
                  get;
    
                  set;
    
             }
    
         }
    
         System.Collections.IList lst 
    
             = Employees.TBL.SelectObject(typeof(EmployeeView));

    通过视图对象可以灵活地获取相关数据信息。

    统计对象映射

    统计对象其实是视图对象的一种,是用于描述数据统计的方式和输出的结果。组件支持以下统计方式:Count,Max,Min,Sum,Avg.

    制定一个统计对象如何下:

    [Table("",TableType.View)]
    
         public class StatOrder
    
         {
             [ViewColumn("","EmployeeID")]
             public int EmployeeID
             {
                  get;
                  set;
    
             }
    
             [StatColumn("","*",StatType.Count)]
             public int Count
             {
                  get;
    
                  set;
             }
    
         }
    
         System.Collections.IList lst = Orders.TBL.SelectObject(typeof(StatOrder));

    组件会自动根据对象的映射信息按雇员分组进行统计。假如想统计某个条件可以这样:

    System.Collections.IList lst = Orders.TBL.Where(
    
             Orders._OrderDate >= DateTime.Parse("1997-1-1")&
    
             Orders._OrderDate < DateTime.Parse("1997-8-1")
    
             ).SelectObject(typeof(StatOrder));

    以上主要描述SQL Artisan在下一个版本实现的功能,可是现在项目忙没多少空余时间去实现,看来要等一个比较长的时间才能完成。

    SQL Artisan现有的版已经在项目中运用,在使用的过程中得到的效果相当理想.刚接触这个组件的几个新同事通过了解已有例子,很快就能适应到项目开发过程中.组件的对象操作和编译检测大提高了编写效率,在项目中得到的效果自己也有点意想不到.

    SQL Artisang下一个版本的功能主完善在表对象操作和对象映射方面;包括:表对象支持数据操作,对象继承,视图对象映射,统计对象映射等.为了让组件功能扩展更方便,把组件的数据映射方式进行重构,由原来的XML描述改成Attribute;并把相关应映射成员搬迁到HFSoft.Data.Mapping名称空间下.以下描述只是组件在新版本中具备的功能,大部分还在实现过程。

    表对象的数据操作

    新版本表对象(Table)由Expressions名称间搬迁到Mapping名称空间下.旧版本的表对象只支持表的关联操作功能比较单一.在功能完善后会支持数据的新增、删除、修改和查询操作。在程序中可以通过以下方式定义表和字段的对象:

    Table tbl = new Table("Employees");
    
    NumberField field = new NumberField("EmployeeID");

    数据新增:

    Employees.TBL.Insert(
    
             Employees._FirstName.Set("Fan"),
    
             Employees._LastName.Set("Henry"),
    
             Employees._BirthDate.Set(DateTime.Parse("1979-1-1"))
    
             );

    数据修改:

    Employees.TBL.Update(Employees._FirstName =="Fan",
    
             Employees._City.Set("GuangZhou"),
             Employees._Address.Set("TianHe"),
             Employees._Region.SetNull());

    数据删除:

    Employees.TBL.Delete(Employees._FirstName =="Fan");

    数据查询:

    System.Collections.IList lst = Orders.TBL.Where(
    
             Orders._OrderDate >= DateTime.Parse("1997-1-1")&
    
             Orders._OrderDate < DateTime.Parse("1997-8-1")
    
             ).SelectObject();
    
         foreach(Orders item in lst)
    
         {
             Console.WriteLine(item.OrderID);
         }

    统计查询:

    System.Data.DataSet ds = Orders.TBL.INNER(OrderDetails.TBL,OrderDetails._OrderID)
    
             .Where(Orders._OrderDate >= DateTime.Parse("1997-8-1"))
    
             .OrderBy(Orders._EmployeeID.DESC)
    
             .GroupBy(Orders._EmployeeID)
    
         .Select(SqlMath.Sum(OrderDetails._Quantity*OrderDetails.
    _UnitPrice*(1-OrderDetails._Discount)).As("account"),Orders._EmployeeID);
    
         foreach(System.Data.DataRow row in ds.Tables[0].Rows)
    
         {
             Console.WriteLine(row["account"]);
         }

    对象继承

    这里的对象继承只是描述对象映射继承关系,通常用于后面所描述的视图对象。在数据查询过程中有经常要获取关联表的某些字段信息;如:在查询订单里需要获取相关雇员的姓名和客户名称,雇员和客户的其他信息是不需要的;这个时候可以继承订单类实现一个新的映射类。

    [Table("",TableType.View)]
    
         public class OrderView:Orders
         {
    
            [ViewColumn("Employees","FirstName")]
             public string EmpFirstName
    
             {
               get;
    
                 set;
    
             }
    
             [ViewColumn("Employees","LastName")]
             public string EmpLastName
    
             {
                  get;
                  set;
    
            }
             [ViewColumn("Customers","CompanyName")]
    
             public string CompanyName
    
             {
                  get;
    
                 set;
    
             }
         }
         System.Collections.IList lst 
             = (Orders.TBL.INNER(Employees.TBL,Employees._EmployeeID)&
               Orders.TBL.INNER(Customers.TBL,Customers._CustomerID))
             . SelectObject (typeof(OrderView));

    通过以上对象的映射,组件不会加载多余的字段信息,从而获取更好的加载效率。这里有一个比较关心的问题就是OrderView是否能进行数据更新操作?在上的例子中OrderView是可以进行更新操作的,但只是会更新父类Orders映射部分其他部分不作更新。在操作过程中组件会验测对象的基类(一直找到最顶层),假如检测对象不是由表对象派生下来就不会进行任何更新操作并抛操作异常。

    视图对象

    视图对象类似数据库中的视图,通过自定义视图对象可以选择性地映射相关字段信息,很多时候映射表的所有字段过于臃肿;视图对象也可能通过表对象派生下来。以下通过视图对象获取雇员的编号和姓名:

    [Table("",TableType.View)]
    
         public class EmployeeView
    
         {
             [ViewColumn("","EmployeeID")]
             public int ID
    
             {
                  get;
    
                  set;
    
             }
    
             [ViewColumn("","FirstName+LastName")]
    
             public string Name
    
             {
    
                  get;
    
                  set;
    
             }
    
         }
    
         System.Collections.IList lst 
    
             = Employees.TBL.SelectObject(typeof(EmployeeView));

    通过视图对象可以灵活地获取相关数据信息。

    统计对象映射

    统计对象其实是视图对象的一种,是用于描述数据统计的方式和输出的结果。组件支持以下统计方式:Count,Max,Min,Sum,Avg.

    制定一个统计对象如何下:

    [Table("",TableType.View)]
    
         public class StatOrder
    
         {
             [ViewColumn("","EmployeeID")]
             public int EmployeeID
             {
                  get;
                  set;
    
             }
    
             [StatColumn("","*",StatType.Count)]
             public int Count
             {
                  get;
    
                  set;
             }
    
         }
    
         System.Collections.IList lst = Orders.TBL.SelectObject(typeof(StatOrder));

    组件会自动根据对象的映射信息按雇员分组进行统计。假如想统计某个条件可以这样:

    System.Collections.IList lst = Orders.TBL.Where(
    
             Orders._OrderDate >= DateTime.Parse("1997-1-1")&
    
             Orders._OrderDate < DateTime.Parse("1997-8-1")
    
             ).SelectObject(typeof(StatOrder));

    以上主要描述SQL Artisan在下一个版本实现的功能,可是现在项目忙没多少空余时间去实现,看来要等一个比较长的时间才能完成。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    SQL汉字转换为拼音的函数

    windows 7系统无法运行Photoshop CS3的解决方法

    巧用MySQL加密函数对Web网站敏感数据进行保护

    MySQL基础知识简介

    Windows7和WinXP下如何实现不输密码自动登录系统的设置方法介绍

    windows 7系统ip地址冲突怎么办?windows 7系统IP地址冲突问题的

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。