博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CYQ.Data 轻量数据层之路 华丽升级 V1.3出世(五)
阅读量:6626 次
发布时间:2019-06-25

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

hot3.png

继上一篇: 之后,有兴趣的读者可以放心使用及应用或练习了!

 

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

05233152_5gRF.gif
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的个数,多了此函数,下面看一下用法:

05233152_5gRF.gif
        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():改进后可省点代码

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

05233152_5gRF.gif
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分支中使用,其效果就会变的相当的明显的,如:

05233152_5gRF.gif
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,本次修改返回首条记录:

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

05233152_5gRF.gif
            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方法,可传多个控件前缀

对于控件的自动取值,上一版本就已存在了,不过没有介绍相关用法,但上一版本只能对一种控件前缀取值如:

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

 

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

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

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

 

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

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

05233152_5gRF.gif
            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:新出产类,存储过程操作专业户

用法简洁如下:

05233152_5gRF.gif
        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查看源码]

转载于:https://my.oschina.net/secyaher/blog/274055

你可能感兴趣的文章
SELinux介绍
查看>>
visual C++ 用 TextOut 输出单个字符
查看>>
Rsyslog实现Nginx日志统一收集
查看>>
开源数字媒体资产管理系统:Razuna
查看>>
linux文本处理三剑客之grep家族及其相应的正则表达式使用详解
查看>>
Java中的IO操作(一)
查看>>
Python---装饰器
查看>>
s17data01
查看>>
kubernetes1.9.1 集群
查看>>
java set and get 用法
查看>>
linux笔记1-1
查看>>
dubbo源码分析-负载均衡
查看>>
一统江湖的大前端(3) DOClever——你的postman有点low
查看>>
云栖大会上发布了哪些移动研发新利器?
查看>>
《黑客免杀攻防》读书笔记-软件逆向工程(6) switch-case分支
查看>>
day6作业--游戏人生完善
查看>>
金字塔思维
查看>>
strak组件(10):批量操作
查看>>
thinkphp空控制器的处理
查看>>
Mahout分步式程序开发 聚类Kmeans(转)
查看>>