zoukankan      html  css  js  c++  java
  • CYQ.Data 轻量数据层之路 华丽升级 V1.3出世(五)

    继上一篇:CYQ.Data 轻量数据层之路 应用示例篇(四) 之后,有兴趣的读者可以放心使用及应用或练习了!

    不过,在稳定版本之后,本人又进行了一次华丽的升级,升级记录如下:

    1:MAction:增加ResetTable功能
    2:MAction:增加在Update/Insert/Fill/ResetTable失败时,自动调用Close()
    3:MAction:修改Fill方法:将之前如果填充时有多条记录返回失败,改成返回首条记录
    4:MAction:增加SetAutoPrefix方法,可传多个控件前缀
    5:MAction:Update方法开放自动获取控件值功能

    6:MAction:关闭属性DataSQLHelper的返回
    7:MProce:新出产类,用于存储过程操作
    8:OutPutData:新增加对存储过程枚举的导出

    9:OutPutData:增加ExeCreateProc方法用于直接执行生成分页存储过程

    以下针对更新进说明:

    1:增加ResetTable功能减少New MAction的个数

    同一个函数中,如果要用到多个表切换查询,你可能每次都要New一个MAction,于是为了减少New的个数,多了此函数,下面看一下用法:

            MAction action = new MAction(TableNames.Users);
            
    if(action.Fill("UserName='Cyq'"))
            {
                action.SetTo(labUserName);
                
    int id=action.Get<int>(Users.ID);
                
    if (action.ResetTable(TableNames.Message))
                {
                    
    if (action.Fill("UserID=" + id))
                    {
                        action.SetTo(labBody);
                    }
                }
                action.Clo
    se();
            }

    根据用户名获取完数据之后,取到用户ID,然后切换到消息留言表,根据用户ID填充取第一条数据。

    2:增加在Update/Insert/Fill/ResetTable失败时,自动调用Close():改进后可省点代码

    我们看一下上节示例代码登陆:

    protected void btnLogin_Click(object sender, EventArgs e)
        {
            MAction action 
    = new MAction(TableNames.Users);
            
    if(action.Fill(string.Format("UserName='{0}' and Password='{1}'", txtUserName.Text.Trim(), txtPassword.Text.Trim())))
            {
                Session[
    "ID"= action.Get<int>(Users.ID);
                action.Close();
                Response.Redirect(
    "Default.aspx");
            }
            
    else
            {
                lbMsg.Text 
    = "用户密码错误!";
                action.Close();
            }
        }

    在没有改进之后,你会发现,代码里会出现两次的action.Close();

    当然,如果中间没有出现Response.Redirect这么突然的转向,你可以把Action.Close()放到最后面去,这样也只有一条。

    然而经过小小的改良后,就算有Response.Redirect,你也可以省略下面一个action.Close()了。

    ----就省略一行,看起来似乎不太咋的,可如果在多重if分支中使用,其效果就会变的相当的明显的,如:

    MAction action = new MAction(TableNames.Users);
            
    if (action.Fill(1))
            {
               
    //省略N行代码
                if (action.Insert())
                {
                    
    //省略N行代码
                    if (action.Update())
                    {
                        action.Close();
                    }
                }
            }

    这种情况下,你不用关注在失败时要关闭数据库链接,你只需要关注成功时,关闭就行了,

    当然中间来个break/return/continue;就得注意点了。

    3:MAction:修改Fill方法:有多条记录时返回失败,改成返回首条记录

    在本版本之前,在Fill完之后,如果有多条记录,会返回false,本次修改返回首条记录:

    因此,你甚至可以这样填充获取最后一条记录:

                MAction action = new MAction(TableNames.Message);
                
    if (action.Fill("UserID=2 order by id desc"))
                {
                    action.SetTo(txtBody);
                    action.Close();
                }

    由于Fill后组合的是where语句,你可以增加order by 来排序获取尾条记录。

    4:MAction:增加SetAutoPrefix方法,可传多个控件前缀
    对于控件的自动取值,上一版本就已存在了,不过没有介绍相关用法,但上一版本只能对一种控件前缀取值如:

                MAction action = new MAction(TableNames.Message);
                action.AutoPrefix 
    = "txt";
                
    if (action.Insert(true))
                {
                    action.Close();
                }

    以上操作能自动获取txt+字段名的控件的值;可是,我们一般情况下,控件的前缀是多种多样的,于是经过改良后:

                MAction action = new MAction(TableNames.Message);
                action.SetAutoPrefix(
    "txt","ddl","lab");
                
    if (action.Insert(true))
                {
                    action.Close();
                }

    系统能自动获取界面上面三种前缀组合的控件值。同时去掉了AutoPrefix属性。

    5:MAction:Update方法开放自动取控件值功能。

    在此版本之前,Update方法没有开放自动取值功能,改良后开放了Update方法的自动取值功能,如:

                MAction action = new MAction(TableNames.Message);
                action.SetAutoPrefix(
    "txt","ddl","lab");
                
    if (action.Update("id=1",true))
                {
                    action.Close();
                }

    6:MAction:关闭属性DataSQLHelper的返回

    此版本之前,你可以通过action.DataSqlHelper获取到底层的SQLHelper对象。

    之前开放是为了开放底层来操作存储过程。由于出产了MProc专业户处理存储过程,所以关闭属性了。

    7:MProce:新出产类,存储过程操作专业户
    用法简洁如下:

            MProc proc = new MProc(ProcNames.GetUserList);
            proc.AddParas(Users.ID, 
    1);
            gvProcUsers.DataSource
    =proc.ExeDataTable();
            gvProcUsers.DataBind();

            proc.ResetProc(ProcNames.GetMessageList);
            proc.AddParas(Message.UserID, 
    1);
            gvProcMessage.DataSource 
    = proc.ExeDataTable();
            gvProcMessage.DataBind();

            proc.Close();

    8:OutPutData:新增加对存储过程枚举的导出
    通过此方法,生成存储过程枚举:

    CYQ.Data.SQL.OutPutData write = new CYQ.Data.SQL.OutPutData();
    Response.Write(write.OutPutAllTableEnum(CYQ.Data.SQL.OutPutData.TableType.P, CYQ.Data.SQL.OutPutData.FiledDescriptionType.Sql2005));

    说明:

    TableType.P:存储过程枚举
    TableType.U:表枚举
    TableType.V:视图枚举

    如生成存储过程枚举如下:

    public enum ProcNames
    {
        GetMessageList,
        GetUserList,
    }

    9:OutPutData:增加ExeCreateProc方法用于直接执行生成的分页存储过程

     CYQ.Data.SQL.OutPutData write = new CYQ.Data.SQL.OutPutData();
     Response.Write(write.ExeCreateProc(CYQ.Data.SQL.OutPutData.FiledDescriptionType.Sql2005));

    生成的存储过程会直接被执行到数据库中,不用再复制到数据库执行了。

    OK,本次升级介绍到此结束,欢迎讨论、使用与留言!!!

    最后提供华丽升级版本V1.3下载:点击下载[大小:60K 没加密没混淆没限制,可放心使用,可直接用Reflector.exe查看源码]

    版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    个人微信公众号
    创业QQ群:617713515
    Donation(扫码支持作者):支付宝:
    Donation(扫码支持作者):微信:
  • 相关阅读:
    [歌词]世界末日
    AJAX是什么?
    [转]Moving Your Access 2002 Database to SQL Server
    .net from身份验证的配置介绍
    ajax
    cmd常用命令
    查看端口解除端口占用
    好久没进来了,今天发一个原创的DatePicker
    真倒霉,前不久分區表錯誤把我數據全部搞沒了
    DataGrid利用DataView过滤,排序
  • 原文地址:https://www.cnblogs.com/cyq1162/p/1803391.html
Copyright © 2011-2022 走看看