k.dbtool.engine v1.0.0.5 数据访问中间件 使用说明(一)

k.dbtool.engine v1.0.0.5

http://k-chen.me 

帮助开发人员提升开发效率,使开发人员能更加关注于数据模型的逻辑处理。使代码更加精炼,减少30%数据访问层代码量。

支持的环境

.Net Framework 4.0 +

Ms-Sql 2005 +

 

使用说明

1. 使用命令行生成工具k.dbtool.cmdLine.exe 生成数据模型(配置参考3)

2. 项目中添加 k.dbtool.engine.dll

3.项目web.config中添加数据连接:

1 <appSettings>
2       <add key="k.dbtool.engine.connstr" value="数据库连接"/> 
3 </appSettings>

OK,配置工作已经完成!接下来高大上的代码编写方式!

 

Hello World示例

public class HelloWoldModel { public string Hi { get; set; } } //自动生成的Model
var dyQuery = new DyQuery<HelloWoldModel>();
Dy dy = new Dy();
dy.Query(dyQuery).AsJson() ;//返回json格式的数据
//or
dy.Query(dyQuery).AsT<HelloWold>();//返回单个实体对象
//or
dy.Query(dyQuery).AsTList<HelloWold>();//返回单个实体对象列表
//or
dy.QueryPaged(dyQuery,pageIndex,pageSize).AsPageList<HelloWold>( pageIndex,pageSize);//返回带分页的单个实体对象
//or
dy.Query(dyQuery).ToString();//生成的查询语句

 

核心类:

DyQuery <TLeft>:查询接口

Dy:查询操作类(正真与数据库进行交互)

EngineResult:数据查询返回的结果

 

须知:Where条件实现的系统函数(SQL系统函数的映射),使用的时候不要使用C#原生的一些函数,如Contains->应该使用DyContains

"DyContains", "DyStartsWith", "DyEndsWith","DySubstring","DyLen","DyReplace","DyNotContains",

"DyNotStartsWith","DyNotEndsWith","DyStuff","DyCharIndex","DyLeft","DyRight","DyT","DyMax",

"DyMin","DySum","DyAvg","DyCount","DyCount1","DyStrGT","DyStrGE","DyStrLT","DyStrLE",

"ToString"

 

操作示例代码

查询操作(Select)

 

        public void 单表查询()
        { 
            var dyQuery = new DyQuery<Tb_Stock_Rzrq>()
                .Where(t => t.股票代码.DyContains("03") && t.融资买入额 > 1000000m && t.股票代码 == "601866" /*&& t.日期 >= DateTime.Now.DyT("yyyy-MM-dd")*/)
               .Order(OrderWay.Desc, t => t.股票代码).Select(t => new {t.股票名称,t.股票代码 }).AsQuery(); 
            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.ReadLine();
        }

        public void 多表查询()
        {
            string key0 = "03";
            string key1 = "30";
            string 交易所 = "sz";
             
            var dyQuery = new DyQuery<Tb_Stock_Rzrq>()
                .Join<Tb_Stock_Trade>(JoinWay.InnerJoin, (t1, t2) => t1.股票代码 == t2.股票代码 && t1.交易日期 == t2.交易日期)
                .Where(t => t.股票代码.DyNotContains(key0) && t.股票代码.DyContains(key1))
                .Where<Tb_Stock_Rzrq>(t => t.交易所 == 交易所 && t.融券余额 > 1000000)
                .Order<Tb_Stock_Rzrq, string>(OrderWay.Desc, t => t.股票代码)
                .Select<Tb_Stock_Trade>(t => new { t.股票代码, t.股票名称, t.成交量 })
                .AsQuery(); 
            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.ReadLine();
        }

        public void 子查询()
        {
            List<string> whereList = new List<string> { 
                "300151",
                "300152",
                "300153",
                "300154",
            };

            var subQuery1 = new DyQuery<Tb_Stock_Rzrq>()
            .Where(ConnectWay.And, t => t.股票代码.DySubstring(3, 2) == "01")
            .Select(t => new { 股票代码 = t.股票代码.DySubstring(2, 3) })
            .AsQuery();

            var subQuery2 = new DyQuery<Tb_Stock_Rzrq>()
            .Where(t => t.股票代码.DyContains("30"))
           .Select(t => new { t.股票代码 })
           .AsQuery();

            var existsQuery = new DyQuery<Tb_Stock_Rzrq>()
            .Where(t => t.股票代码.DyContains("30"))
           .Select(t => new { t.股票代码 })
           .AsQuery();

            var dyQuery = new DyQuery<Tb_Stock_Trade>()
                .WhereIn<Tb_Stock_Trade, string>(ConnectWay.And, t => t.股票代码.DySubstring(2, 3), subQuery1)
                .WhereNotIn<Tb_Stock_Trade, string>(ConnectWay.And, t => t.股票代码, whereList)
                .WhereNotIn<Tb_Stock_Trade, string>(ConnectWay.And, t => t.股票代码, subQuery2)
                .AsQuery(); 

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.ReadLine();
        }

        public void Exists子查询()
        {
            var subQuery = new DyQuery<Tb_Stock_Rzrq>()
                 .Where(t => t.股票代码.DyContains("30"))
                 .Select(t => new { 数量 = t.股票代码.DyCount1() })
                 .SetWhereExistsCondition<Tb_Stock_Trade, Tb_Stock_Rzrq>(ConnectWay.And, (t1, t2) => t1.特大单成交金 > t2.融资余额)
                .AsQuery();

            var dyQuery = new DyQuery<Tb_Stock_Trade>()
                .WhereExists(ConnectWay.And, subQuery)
                .AsQuery(); 

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.ReadLine();
        }

        public void 分组查询()
        {

            var dyQuery = new DyQuery<Tb_Stock_Trade>()
              .Group<Tb_Stock_Trade, string>(t => t.股票代码.DySubstring(2, 3))
              .Group<Tb_Stock_Trade, decimal>(t => t.今开)
              .Having<Tb_Stock_Trade>(ConnectWay.And, t => t.今开.DyCount() > 1)
              .Select<Tb_Stock_Trade>(t => new
              {
                  数量 = t.交易所.DyCount(),
                  最大 = t.最高.DyMax(),
                  最小 = t.最低.DyMin(),
                  t.今开

              })
              .AsQuery(); 

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.ReadLine();
        }

        public void 分页查询()
        {

            var dyQuery = new DyQuery<Tb_Stock_Rzrq>().Where(t => t.股票代码.DyContains("03") && t.融资买入额 > 1000000m)
               .Order(OrderWay.Desc, t => t.股票代码).AsQuery(); 

            var pageList = dy.QueryPaged(dyQuery, 1, 20);
            Console.WriteLine(pageList.AsJson());
            Console.ReadLine();
        }

        public void 记录行数()
        {

            var dyQuery = new DyQuery<Tb_Stock_Trade>().Where(t => t.今开 > 100).AsQuery();
            var count = dy.Count(dyQuery);

            Console.WriteLine(count);
            Console.ReadLine();

        }

        public void 首行首列()
        {

            var dyQuery = new DyQuery<Tb_Stock_Trade>().Where(t => t.今开 > 100).AsQuery();
            var ret = dy.RC(dyQuery);

            Console.WriteLine(ret);
            Console.ReadLine();
        }

        public void 是否存在()
        {

            var dyQuery = new DyQuery<Tb_Stock_Trade>().Where(t => t.今开 > 100).AsQuery();
            var exists = dy.Exists(dyQuery);

            Console.WriteLine(exists);
            Console.ReadLine();

        }

        public void 取Top()
        {
            var dyQuery = new DyQuery<Tb_Stock_Trade>().Where(t => t.今开 > 100).Select(t => new { t.股票名称, t.股票代码 }).AsQuery();
            var result = dy.Top(dyQuery, 5);
            Console.WriteLine(result.AsJson());
            Console.ReadLine();
        }

 

插入操作(Insert)

 

        public void 单行插入() {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().Insert(new Tb_Sync_Opt
            {
                同步日期 = "2016-01-01",
                资金同步标识 = 1,
                量价同步标识 = 1,
                两融同步标识 = 1,
                数据初始化标识 = 1,
                同步完成标识 = 1,
                V = Guid.NewGuid().ToString("N")
            }).AsQuery();
            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }
        public void 多行插入() {
            List<Tb_Sync_Opt> opts = new List<Tb_Sync_Opt>();
            opts.Add(new Tb_Sync_Opt
            {
                同步日期 = "2015-01-29",
                资金同步标识 = 1,
                量价同步标识 = 1,
                两融同步标识 = 1,
                数据初始化标识 = 1,
                同步完成标识 = 1 
            }); opts.Add(new Tb_Sync_Opt
            {
                同步日期 = "2015-01-30",
                资金同步标识 = 1,
                量价同步标识 = 1,
                两融同步标识 = 1,
                数据初始化标识 = 1,
                同步完成标识 = 1 
            });
            var dyQuery = new DyQuery<Tb_Sync_Opt>().Insert(opts).Insert<Tb_Stock_Rzrq>(new Tb_Stock_Rzrq
            {
                交易日期 = "2015-01-29",
                股票名称 = "中海集运",
                股票代码 = "601866"
            }).AsQuery();
            

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

 

更新操作(Update)

 

        public void 单表按需更新() {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().Update(t => t.两融同步标识 == 1).AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

        public void 单表条件更新()
        {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().Update(t =>  t.量价同步标识 == t.量价同步标识 + 5).Where(t => t.同步日期 == "2016-01-30").AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

        public void 他表更新() {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().UpdateFrom<Tb_Stock_Trade>((left, from) => left.V == from.股票代码 && left.两融同步标识 == 0)
                .Where<Tb_Stock_Trade>(t => t.交易日期 == "2015-12-01" && t.股票代码 == "601866") 
                .AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }


        public void 多表连接更新()
        {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().UpdateFrom<Tb_Stock_Trade>((left, from) => left.V == from.股票代码 && left.两融同步标识 == 0)
                .Join<Tb_Stock_Rzrq>(JoinWay.InnerJoin, (t1, t2) =>  t1.同步日期 == t2.交易日期)
                .Join<Tb_Stock_Rzrq, Tb_Stock_Trade>(JoinWay.InnerJoin,(t1,t2)=> t1.交易日期==t2.交易日期 && t1.股票代码 == t2.股票代码)
                .Where<Tb_Stock_Trade>(t => t.交易日期 == "2015-12-01" && t.股票代码 == "601866")
                .AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

        public void 实例更新() {

            var dy1 = new DyQuery<Tb_Sync_Opt>().Where(t => t.同步日期.DyStrLE("2015-12-03")).Select().AsQuery();
            var dy2 = new DyQuery<Tb_Stock_Trade>().Where(t => t.交易日期 == "2015-12-01" && t.股票代码.DyContains("60166")).Select().AsQuery(); 
            List<Tb_Sync_Opt> opts = dy.Query(dy1).AsTList<Tb_Sync_Opt>();
            foreach (var opt in opts) {
                opt.两融同步标识 = 1;
                opt.量价同步标识 = 1;
            } 
            List<Tb_Stock_Trade> trades = dy.Query(dy2).AsTList<Tb_Stock_Trade>();
            int i=0;
            foreach (var trade in trades) {
                trade.股票名称 = trade.股票名称 + 2;
            }

            var dyQuery = new DyQuery<Tb_Sync_Opt>().Update(opts).Update(trades).AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

 

删除操作(Delete)

        public void 直接删除()
        {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().Delete().AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

        public void 单表条件删除()
        {
            var dyQuery = new DyQuery<Tb_Sync_Opt>().Delete().Where(t => t.同步日期 == "2016-01-29").AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

        public void 他表删除()
        {
            var existsQuery = new DyQuery<Tb_Stock_Trade>()
                .SetWhereExistsCondition<Tb_Stock_Rzrq, Tb_Stock_Trade>(ConnectWay.And, (parent, child) => parent.股票代码 == child.股票代码)
                .Select(t => 1).AsQuery();

            var dyQuery = new DyQuery<Tb_Stock_Rzrq>().Delete()
                .WhereIn<string>(ConnectWay.And, t => t.股票代码, new List<string> { "000001", "000002" })
                .WhereExists(ConnectWay.And,existsQuery)                
                .AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }
        public void 实体删除() {
            var dy1 = new DyQuery<Tb_Sync_Opt>().Where(t => t.同步日期.DyStrLE("2015-12-03")).Select().AsQuery();
            var dy2 = new DyQuery<Tb_Stock_Trade>().Where(t => t.交易日期.DyStrLE("2015-12-03") && t.股票名称=="test").Select().AsQuery();
            List<Tb_Sync_Opt> opts = dy.Query(dy1).AsTList<Tb_Sync_Opt>(); 
            List<Tb_Stock_Trade> trades = dy.Query(dy2).AsTList<Tb_Stock_Trade>(); 

            var dyQuery = new DyQuery<Tb_Sync_Opt>().Delete(opts).Delete(trades).AsQuery();

            Console.WriteLine(dy.Query(dyQuery).AsJson());
            Console.Read();
        }

 

存储过程操作(Storage)

        public void 不带参数SP() {
            var dy1 = new DyQuery<SP_TB_SYNC_OPT_QUERY_ALL>().Proc(null).Proc<SP_TB_ESTIMATE_INDEXES_QUERY_ALL>(null).AsQuery(); 
            Console.WriteLine(dy.Query(dy1).AsJson());
            Console.Read();
        }
        public void 带参数SP()
        {
            var dy1 = new DyQuery<SP_TB_VIP_QUERY_ONE>().Proc(new SP_TB_VIP_QUERY_ONE { 会员ID = "dcf9e93390dd0bfe" })
                .Proc<SP_TB_CAPTCHA_RULE_QUERY_ONE>(new SP_TB_CAPTCHA_RULE_QUERY_ONE { RULEID = "1e051f49975f46dbbb7fd5e554c70385" })
                .Proc<SP_TB_ESTIMATE_INDEXES_QUERY_ONE>(new SP_TB_ESTIMATE_INDEXES_QUERY_ONE { 交易日期="2015-12-24", 股票代码="002242"})
                .AsQuery();
            Console.WriteLine(dy.Query(dy1).AsJson());
            Console.Read();
        }

 

Insert,Update,Delete操作自动事务处理

数据版本控制方式,在数据库创建表的时候,添加字段名 V varchar(36) 框架会自动进行版本控制(在Insert,Update,Delete操作中)

  

 

转载于:https://www.cnblogs.com/KenChen/p/5263386.html

PenguinsDbTools使用说明 第一章 工具配置 下载地址: https://sourceforge.net/projects/penguinsdbtools/ 1.1 数据库连接配置 作者邮件: cuishuangjia@gmail.com 1.2 数据库导入配置 合作公司: http://www.cncsys.com.cn/ 1.3 数据库导出配置 1.4 其它配置 第二章 表的设计 2.1 表的设计 2.1.1 追加设计 2.1.2 应用 2.2 全展开 2.2.1 查看表结构 2.2.2 复制表名和字段 2.2.3 无条件查询单表中所有数据 2.2.4 设计表数据字段约束 2.2.5 查询表中的记录件数 2.3 根据表设计的SQL进行单表检索 2.4 重置表结构 2.5 取得快照信息到工具中 2.6 SQL文窗口 第三章 SQL文窗口 3.1 全展开(同2.2) 3.2 整形 3.3 执行 3.4 历史 3.5 激活SQL窗口方式 第四章 表数据的导出处理 4.1 根据表设计导出 4.1.1 导出到EXCEL中 4.1.1.1 导出到同一张SHEET中 4.1.1.2 每个表都做为单独的文件导出 4.1.1.3 大数据导出(数据分页) 4.1.2 导出到文本文件 4.1.2.1 导出到同一张SHEET中 4.1.2.2 每个表都做为单独的文件导出 4.1.2.3 大数据导出(数据分页) 4.2 根据SQL文件执行或导出 4.2.1 根据含有检索SQL的文件导出EXCEL 4.2.2 根据含有检索SQL的文件导出文本文件 4.2.3 执行含有非检索SQL的文件 4.3 全字段补值 4.4 表数据定时导出 第五章 表数据的导入处理 5.1 手动造数据,导入到数据库中 5.2 表数据定时导入(与4.4相似) 第六章 表数据的差分 6.1 EXCEL差分 6.2 文本文件差分
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值