一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-UDA中的委托与应用

简介:
上文回顾

      上一篇文章基于AgileEAS.NET平台基础类库进行应用开发-使用UDA操纵SQL语句一文中演示如何使用UDA进行常规的业务进行操作,我们看到两种数据操纵流程,一种是原始的操作流程,另一种是简化的数据操作流程,应用开发人员不用关心数据库的打开与关闭,这些工作由UDA为我们完成,我们只需要实现与业务相关代码即可。

问题引出

       我们现在再看一眼我们在前面提供的数据处理流程:

image
        AgileEAS.NET平台提供两种数据处理流程供我们选择,两种方式的差别在于应用开发人员是否控制连接的打开与关闭,第一种方式应用开发人员管理连接的打开与关闭,我们称为他原生的数据访问方式,第二种方式是数据库的打开与关闭由UDA对象自动控件,我们称他为懒惰方式吧,在执行SQL之前由UDA打开连接,执行完SQL之后由UDA关闭连接,也就是说在Quer和Execute方法中,包含了数据库的打开与关闭操作。

 

        在基于AgileEAS.NET平台的应用开发中,我们推荐第二种方式,但同时一个问题来了,Query方法在执行完SQL语句之后关闭了连接,对于IDataReader这种必须要连接在线的返回类型则第二种方式无法支持,同时,对于事务处理,一个事务中包含多条语句,第二种方式的自动打开与关闭连接不能支持事务处理。

如何解决

 

 

 

        鉴于上面的问题,我们提供了两种解决方法,第一、使用原生模式处理数据访问,当然这是我们不推荐的,第二、UDA的IDataAccessor中提供了两个委托方法DelegateQuery、TransactionExecute及其相关的重载,DelegateQuery实现DataReader访问方式的委托查询,TransactionExecute实现事务委托,有关于这两个委托方法及其delegate定义请参考AgileEAS.NET之统一数据访问一文及AgileEAS.NET基础类库参考手册

委托查询例子

         现在我们来使用委托查询修改上文中IDataReader查询的例子,先贴上原生方式的IDataReader查询:

    /// <summary>
    /// 演示使用IDataReader。
    /// </summary>
    /// <remarks>
    /// IDataReader返回类型必须要求数据库打开,也就是说手工管理连接的打开。
    /// </remarks>
    public void DemeGetDataReader()
    {
        IDataAccessor accessor = UdaContext.DataAccessor;

        accessor.DataConnection.Open();

        try
        {
            IDataReader reader = null;
            try
            {
                reader = accessor.QueryDataReader("Select top 30 * from dbo.product");
                //reader = (IDataReader)accessor.Query("Select top 30 from dbo.product",
                 ResultType.DataReader);  //等效

                while (reader.Read())
                {
                    int count = reader.FieldCount;
                    for (int i = 0; i < count; i++)
                    {
                        System.Console.Write(string.Format("{0}={1}\t", reader.GetName(i), 
                        reader.IsDBNull(i) ? "null" : reader.GetValue(i)));
                    }
                    System.Console.Write("\n");
                }
            }
            finally
            {
                if (reader != null && !reader.IsClosed)
                    reader.Close();
            }
        }
        finally
        {
            accessor.DataConnection.Close();
        }
    }

         下面我们来使用DelegateQuery改造这个方法:

    /// <summary>
    /// 演示代理查询。
    /// </summary>
    public void DemeDelegateQuery()
    {
        IDataAccessor accessor = UdaContext.DataAccessor;
        accessor.DelegateQuery(new DataReaderHandler(this.InternalGetDataReader), 
        "Select top 30 * from dbo.product");
    }

    /// <summary>
    /// 代理方法。
    /// </summary>
    /// <param name="reader"></param>
    void InternalGetDataReader(IDataReader reader)
    {
        while (reader.Read())
        {
            int count = reader.FieldCount;
            for (int i = 0; i < count; i++)
            {
                System.Console.Write(string.Format("{0}={1}\t", reader.GetName(i), 
                reader.IsDBNull(i) ? "null" : reader.GetValue(i)));
            }
            System.Console.Write("\n");
        }
    }
              是不是这种方法感觉很简洁。 

          有关本例子所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本文代码下载:UDA.Demo2.rar

 

链接

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。



    本文转自魏琼东博客园博客,原文链接:http://www.cnblogs.com/eastjade/archive/2010/09/20/1831450.html,如需转载请自行联系原作者

相关文章
|
4月前
|
算法 Java 调度
|
4天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
6月前
|
Go
Golang 语言怎么使用 net/http 标准库开发 http 应用?
Golang 语言怎么使用 net/http 标准库开发 http 应用?
26 0
|
4月前
|
小程序 安全 JavaScript
.NET微信网页开发之通过UnionID机制解决多应用用户帐号统一问题
.NET微信网页开发之通过UnionID机制解决多应用用户帐号统一问题
.NET微信网页开发之通过UnionID机制解决多应用用户帐号统一问题
|
4月前
|
C# Windows
C#安装“Windows 窗体应用(.NET Framework)”
C#安装“Windows 窗体应用(.NET Framework)”
50 0
|
5月前
|
数据采集 开发框架 JavaScript
基于.NET Core内置浏览器窗体应用程序界面框架
基于.NET Core内置浏览器窗体应用程序界面框架
45 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
30天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0