zoukankan      html  css  js  c++  java
  • DataRabbit 轻量的数据访问框架(06) -- IRelationAccesser

       (完全限定类名:DataRabbit.Relation.IRelationAccesser) 
       
       前面介绍的IOrmAccesser是对单表进行ORM访问,而ITableAccesser是对单表进行基于关系的访问,如果我们要进行联合查询这样的跨表搜索,则使用它们就无法达成目标。这时,你可以使用IRelationAccesser。与IOrmAccesser和ITableAccesser的针对性不同(它们针对数据库中的某个表),IRelationAccesser针对的是整个目标数据库。在DataRabbit中,所有的跨表操作推荐使用IRelationAccesser来完成(除非以后有更好的解决方案)。

       IRelationAccesser将数据访问分成两类:Query和Command。Query返回DataSet,Command没有返回值。另外,IRelationAccesser还支持执行带有参数的查询语句。
       我们可以从DataRabbit的入口点IDataAccesser中获取IRelationAccesser引用: 
       IRelationAccesser relationAccesser = dataAccesser.GetRelationAccesser(null);

       IRelationAccesser接口的完整定义如下,仅仅包含三个方法:
        public interface IRelationAccesser : ITransactionAccesser
        {
            
    /// <summary>
            
    /// DoCommand 执行数据命令
            
    /// </summary>       
            void DoCommand(string command);

            
    // <summary>
            /// DoQuery 执行查询数据
            
    /// </summary>  
            DataSet DoQuery(string query);

            
    /// <summary>
            
    /// ExcuteRegularQuery 执行带有参数的查询语句,参数值由paraValues给出。
            
    /// </summary>       
            /// <param name="regularQuery">带参数的查询语句</param>
            /// <param name="paraPrefix">查询语句中参数的前缀,该前缀可以用户自定义</param>    
            /// <param name="paraValues">键为参数名,不带参数前缀</param>    
              
            DataSet ExcuteRegularQuery(string regularQuery, string paraPrefix, IDictionary<stringobject> paraValues);       
        }    
       假设,我们要进行一个联合查询,可以这样做:
       string joinSelect = "SELECT ErrorDetail.*, TaskError.Location FROM ErrorDetail INNER JOIN TaskError ON ErrorDetail.ErrorID = TaskError.ID WHERE (TaskError.ID = '1')";
       DataSet ds 
    = relationAccesser.DoQuery(joinSelect);
       如果想使用参数化的查询,可以调用ExcuteRegularQuery方法,我们现在通过调用ExcuteRegularQuery方法来实现上面的功能:
       string joinSelect = "SELECT ErrorDetail.*, TaskError.Location FROM ErrorDetail INNER JOIN TaskError ON ErrorDetail.ErrorID = TaskError.ID WHERE (TaskError.ID = @ID)";         
       
    //准备参数
       IDictionary<stringobject> dic = new Dictionary<stringobject>();
       dic.Add(
    "ID"1);//参数名不用带参数前缀
       
    //查询
       DataSet ds2 = relationAccesser.ExcuteRegularQuery(joinSelect, "@", dic);
       特别要注意的是,ExcuteRegularQuery方法中的paraPrefix参数用于表示查询语句中所使用的参数前缀,这个前缀用户可以自己指定,DataRabbit在执行前会自动将其转换为数据库所要求的参数前缀。比如,如果后台数据库是Oracle,上述语句的参数前缀“@”会被自动转换成Oracle所要求的前缀“:”。


    转到:DataRabbit 轻量的数据访问框架 -- 序 



       
  • 相关阅读:
    H5调用本地摄像头[转]
    [转]把树莓派配置成无线路由器
    [转]Raspberry Pi做成路由器
    websocket for python
    HRMS(人力资源管理系统)-SaaS架构设计-概要设计实践
    HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性、非功能性、关键约束)-下篇
    HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性、非功能性、关键约束)-上篇
    系统架构-设计模式(适配器、观察者、代理、抽象工厂等)及架构模式(C/S、B/S、分布式、SOA、SaaS)(干货)
    HRMS(人力资源管理系统)-从单机应用到SaaS应用-系统介绍
    2018,全新出发(全力推动实现住有所居)
  • 原文地址:https://www.cnblogs.com/zhuweisky/p/682502.html
Copyright © 2011-2022 走看看