zoukankan      html  css  js  c++  java
  • CYQ.Data 轻量数据层之路 开篇介绍(一)

    PS:本系列已太旧,仅供回忆;

    项目使用请看V5系列http://www.cnblogs.com/cyq1162/category/852300.html

    近段时间,写: Silverlight+WCF 新手实例 象棋 专题索引 系列,近四十篇的长篇,写到有一种走火入魔的感觉!

    虽然四十篇终结时,离:Silverlight+WCF 新手实例 象棋 在线演示 还有一小段距离,不过整体框架与功能都完整的开源讲完了!

    为了避免暂时的走火入魔,只好先写写别的系列文章,关于象棋系列后续情况,先暂缓小些天先了。

    从开始到现在,感觉写过那么四五个数据框架了,然而怀念的,还是第一次写时的非实体型框架!!!

    记得07年时,发表过那么一篇:CyQ.Data 轻量级数据访问层[beta体验版] [当时大伙太年轻,语言有点激,顶不住压力暂时性关闭了文章了-_-...]

    两年后09年时,开启了封存两年的旧文,在编辑时,不知是不是博客园bug,文章的日期发生变化了,成了09年的文章!

    同时开始开源的写文了:CYQ.Data 轻量数据层之路(9) [可能写的太勿勿,文章几乎全是copy代码,文字少的可怜-_-......]

    写到一半时,适逢出差,月后回来,发现找不找原来示例源码了,于是勿勿补上一篇,算是小小完结了一下。

    近些天突然在电脑上发现了原来的示例源码,运行了一下,发现那个自定义Table的还没能实现绑定列表控件-_-!

    今天,花了N小时重构了以前的代码,删除了没用到的重截,优化代码,调整结构,重新上路,坚持把路走完!!!

    1. CyQ.Data 介绍

    DLL下载:点击下载 [大小:56K 没加密没混淆没限制,可放心使用,可直接用Reflector.exe查看源码,后面有开源文章续上]

    类库名称空间介绍,上图:

    大体情况说明:

    1:Table文件夹下:自定义实现绑定MDataTable,远离DataTable
    2:Cache文件夹下:用于并缓存表结构信息
    3:Action文件夹下:主要操作对象
    4:SQL文件夹下:
    DataType:提供C#数据类型和数据库类型的转换等相关信息
    SQLHelper:本人精简数据库操作类:
    Log:用于记录数据操作异常信息
    ProcedureSql:,内置查询数据表结构查询语句
    OutPutData:内置sql 2000和sql 2005分页存储过程;同时提供帮助类自动生成表或视图枚举

    再附说明:

    本DLL原则上采取Row[索引]形式进行访问的,为了方便敲点代码,提供用枚举传参方法,内部会自动将枚举转成int,进行索引访问!

    对于本系列,请读者尽量不与生成[实体类+反射组合查询语句]的型框架做相关的比较讨论!

    功能特点如下:

    l         支持SQL Server 2000/2005/2008 .Net 2.0。其它数据库,不支持

    l         只需要配置数据库链接,例如:

            <connectionStrings>
                 <add name="Conn" connectionString="Server=.;database=CQSpace;uid=sa;pwd=123456"/>
           </connectionStrings>

         l         简单易用,简单使用见于下面介绍。


     

    ps:由于本次调整代码量多,所以不知会不会改出什么问题,目前本机测试暂没发现问题,如发现bug请下面留言。

    2. CyQ.Data 使用说明

    该工具基于.NET 2.0,所以不能用在.NET 1.1的工程。 首先给你的工程添加Cyq.Data引用即可!

    项目开始之前,请调用Cyq.Data.SQL.OutPutData下的静态方法,生成相应数据的分页存储过程如:

    //生成sql2005带分页的存储过程
    Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2005());
    //生成sql2000带分页的存储过程
    Response.Write(CYQ.Data.SQL.OutPutData.GetSelectBaseOutPutToHtmlForSql2000());

    接着使用OutPutData生成数据库表或视图枚举:

    //生成枚举之后,Copy到一个类文件即可,[需要实体化,因为需要关联数据库,构造函数不传参,默认取Conn里的链接]
    CYQ.Data.SQL.OutPutData write = new CYQ.Data.SQL.OutPutData();
    //表枚举
    Response.Write(write.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.U, CYQ.Data.SQL.OutPutData.FiledDescriptionType.NoDescription));
    //输出视图枚举
    Response.Write(write.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.V, CYQ.Data.SQL.OutPutData.FiledDescriptionType.NoDescription));

    当然里面也有提供对单表的生成方法了。

    接着开始项目实战了,下面示例已经过测试:

    1:单行数据填充:

      MAction action = new MAction(TableNames.CQ_Album);
      
    if (action.Fill(1))
      {
          lbText.Text 
    = action.Data[CQ_Album.AlbumName].Value.ToString();
          action.Close();
      }

    2:数据更新:

     MAction action = new MAction(TableNames.CQ_Album);
     
    if (action.Fill(1))
      {
           action.Data[CQ_Album.AlbumName].Value 
    = txtAlbumName.Text;
           action.Update();
           action.Close();
      }

    数据更新方法二:

     MAction action = new MAction(TableNames.CQ_Album);
     action.Data[CQ_Album.AlbumName].Value 
    = txtAlbumName.Text;
     action.Update(
    "id=1");
     action.Close();

    3:数据删除:

    MAction action = new MAction(TableNames.CQ_Album);
    action.Delete(2);
    action.Close();

    数据删除方法二:

    MAction action = new MAction(TableNames.CQ_Album);
    action.DeleteByWhere(
    "id=2");
    action.Close();

    4:数据查询与绑定:

    查询所有:

    MAction action = new MAction(TableNames.CQ_Album);
    gvTable.DataSource 
    = action.Select();
    gvTable.DataBind();
    action.Close();

    分页查询:

     MAction action = new MAction(TableNames.CQ_Album);
     
    int rowCount;
     gvTable.DataSource 
    = action.Select(110"id>10"out rowCount);
     gvTable.DataBind();
     action.Close();

    5:多表怎么搞定?

    A:视图方式,将多表查询放到数据库里成视图,情况和单表一样使用;

    B:自定义查询语句如:

    string table = "(select A.*,B.Name from CQ_Album A left join CQ_UserInfo U on A.UserID=U.UserID) v";
    MAction action 
    = new MAction(table);
    int rowCount;
    gvTable.DataSource 
    = action.Select(110"id>1"out rowCount);
    gvTable.DataBind();
    action.Close();

     当然了,你只要把自定义的sql语句,全放一边去统一管理就行了,界面上就不要出现sql语句了!

    附加:

    本人从新的实体框架上引入SetTo与GetFrom方法,下一篇改造版本将从索引赋/取值中解放,敬请关注:

    //原索引设置值:  
    action.Data[CQ_Album.AlbumName].Value = txtAlbumName.Text;  
    //改进后成:  
    action.GetFrom(txtAlbumName);  

    //原索引读值: 
    txtAlbumName.Text=action.Data[CQ_Album.AlbumName].Value  
    //改进后成:  
    action.SetTo(txtAlbumName);  

    OK,本开篇就点到为止,欢迎读者留言!

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    ABS
    Windows Internals 6th Security
    Windows Internals 6th chap4 services
    Windows Internals 6th chap5 Thread
    Python 腾讯云短信,发送手机验证码
    Python 阿里大于发送手机验证码
    爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)
    爬虫新手学习1-爬虫基础
    Python Django CMDB项目实战之-3创建form表单,并在前端页面上展示
    Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1797744.html
Copyright © 2011-2022 走看看