网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > SQL文摘
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.AMD与微软结盟推出Microsoft SQL.
.SQL Server 2005免费版本下载排行.
.Microsoft SQL Server 2008数据库.
.SQL Server2005发布元年 微软正身.
.SQL Server 2005 全新的数据整合.
.Ms sql server 2005 sp1发布 .
.SQL Server 2005的30个最重要特点.
.SQL Server Compact Edition RC1.
.微软发布SQL Server 2008测试版 .
.微软SQL Server 2005成功领跑企业.
.SQL Server 2000 SP4发布.
.微软宣布SQL Server 2005功能及售.
.SQL Server 2005发布日期重新确认.
.分析评论 开源开发模式能否适合商.
.Sun完成收购开放源代码软件厂商M.
.Sybase Analytic Appliance在美国.
.微软确认年底发布SQL Server 200.
.SQL Artisan数据库访问组件下一版.
.Sql server Mobile将“无处不在”.
.微软SQL Server 2005的30项顶尖特.

SQL Artisan数据库访问组件下一版本完善功能概述

发表日期:2006-5-24


     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在下一个版本实现的功能,可是现在项目忙没多少空余时间去实现,看来要等一个比较长的时间才能完成。

       有兴趣的朋友可以提一下意见和想法。

http://henryfan.cnblogs.com/archive/2006/05/23/407012.html

上一篇:Ms sql server 2005 sp1发布 人气:9503
下一篇:SQL Server 2005—数据库管理10个最重要的特点 人气:12384
浏览全部SQL Artisan的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐