NQL.NET 是我最近在NDO(DOTNET DataAccess Object)的基础上并吸收了Hibernate,Rails框架中的活动记录,Castle中的活动记录,Grove,ActionPack,OQL的精华思想上建立的一套数据库对象查询语言(NQL,NDO Query Language)它支持 CRUD操作,也包括 select、from、join、on、where、group by、having、order by 和 case 子句。

本文中的代码都以SQL SERVER 2000中的数据库Northwind 做为例子,代码以CSharp为例,其中的例子都是我做过严格的测试.

数据库配置

<add key="ConnectionString" value="Data Source=localhost; Database=Northwind; Integrated Security=true;"/>

导入NQL包 : using NDO;

1.Filter 过滤器

this.dataGrid1.DataSource = new Query("Products")
                .Filter("UnitPrice*UnitsInStock >=1000")
                .GetDataTable();

上面的程序生成的SQL 语句是

SELECT  * 
FROM Products 
WHERE 
    UnitPrice*UnitsInStock >=1000

2.邦定参数的Filter 过滤器

this.dataGrid1.DataSource = new Query("Products")
                .Filter("UnitPrice*UnitsInStock >=@AA")
                .AddParam("AA",1000)
                .GetDataTable();

SQL 输出

SELECT  * 
FROM Products 
WHERE 
    UnitPrice*UnitsInStock >=@AA

3.Where 的简单用法(该例子中用到了泛性的活动记录)

this.dataGrid1.DataSource = new ActiveRecord("Orders")
                .SelectCommand
                .Where("ShipVia",2)
                .Asc("CustomerID","OrderID")
                .GetDataTable();

SQL 输出

SELECT 
    [OrderID],
    [CustomerID],
    [EmployeeID],
    [OrderDate],
    [RequiredDate],
    [ShippedDate],
    [ShipVia],
    [Freight],
    [ShipName],
    [ShipAddress],
    [ShipCity],
    [ShipRegion],
    [ShipPostalCode],
    [ShipCountry]
FROM
    [Orders]    
WHERE
    ([Orders].[ShipVia]  = @ShipVia)
 ORDER BY CustomerID,OrderID ASC 

4.子查询的运用

Query qryCustomer = new Query("Customers")
                .SelectColumn("CustomerID")
                .Where("ContactTitle","Owner");

            this.dataGrid1.DataSource = new Query("Orders")
                .NewWhere("ShipVia",1)
                .And(Ex.In("CustomerID",qryCustomer)).GetDataTable();

SQL 输出

SELECT  * 
FROM Orders 
WHERE 
    [Orders].[ShipVia]  = @ShipVia
    AND [Orders].[CustomerID]  IN (
                                      SELECT 
                                        [Customers].[CustomerID]
                                    FROM Customers 
                                    WHERE 
                                    ([Customers].[ContactTitle]  = @ContactTitle)
                                    )

5.模糊查询

this.dataGrid1.DataSource = new Query("Customers")
                .NewWhere(Ex.Like("ContactTitle","Sales%"))
                .GetDataTable();

SQL  输出

SELECT  * 
FROM Customers 
WHERE 
    [Customers].[ContactTitle]  LIKE @ContactTitle

6.投影和多表连接操作

Query q = new Query("Orders","a");
            this.dataGrid1.DataSource = q
                .SelectColumn("OrderID")
                ._("OrderDate")
                ._("RequiredDate")
                ._("b","ProductID")
                .InnerJoin("Order Details").As ("b")
                    .On(q.NewCondition("OrderID") == q.NewCondition("b","OrderID"))
                .NewWhere("EmployeeID",5)
                .And("ShipVia",1)
                .GetDataTable();

SQL 输出

SELECT 
    [a].[OrderID],
    [a].[OrderDate],
    [a].[RequiredDate],
    [b].[ProductID]
FROM Orders a 
INNER JOIN [Order Details] b
    ON [a].[OrderID]=b.[OrderID] 
WHERE 
    [a].[EmployeeID]  = @a_EmployeeID
    AND [a].[ShipVia]  = @a_ShipVia

7.简单的插入查询

new SimpleInsertQuery("Region").Values(this.textBox1.Text,this.textBox2.Text).Execute();
  this.dataGrid1.DataSource = new Query("Region").GetDataTable();

SQL 输出

INSERT INTO [Region] VALUES ( 
    @RegionID,@RegionDescription
)

SELECT  * 
FROM Region 

8.插入语句2

new SimpleInsertQuery("Region").Columns("RegionID","RegionDescription").Values(this.textBox1.Text,this.textBox2.Text).Execute();
 this.dataGrid1.DataSource = new Query("Region").GetDataTable();

SQL 输出

INSERT INTO [Region] (
    RegionID,RegionDescription
) VALUES (
    @RegionID,@RegionDescription
)

SELECT  * 
FROM Region 

9.删除

new SimpleDeleteQuery("Region").Where("RegionID",this.textBox1.Text).Execute();
this.dataGrid1.DataSource = new Query("Region").Asc("RegionID").GetDataTable();

SQL 输出

DELETE FROM [Region]
WHERE 
    [Region].[RegionID]  = @RegionID

SELECT  * 
FROM Region 
 ORDER BY RegionID ASC 

10.删除2

new SimpleDeleteQuery("Region")
                .Filter("RegionID=@RegionID")
                .AddParam("RegionID",this.textBox1.Text)
                .Execute();
            this.dataGrid1.DataSource = new Query("Region").Asc("RegionID").GetDataTable();

SQL 输出同上

11.删除3,默认按照数据中的主键进行删除

new SimpleDeleteQuery("Region")
                .Execute(this.textBox1.Text);
            this.dataGrid1.DataSource = new Query("Region").Asc("RegionID").GetDataTable();

SQL 输出同上

12. 更新操作

new SimpleUpdateQuery("Region")
                .Set("RegionDescription",this.textBox2.Text)
                .Where("RegionID",this.textBox1.Text)
                .Execute();

SQL 输出

UPDATE [Region] SET 
    [Region].[RegionDescription]=@RegionDescription
WHERE 
    [Region].[RegionID]  = @RegionID

SELECT  * 
FROM Region 
 ORDER BY RegionID ASC 

13.计算列的加法运算(可以对计算列进行斯则混合运算)

Query q = new Query("Region");
            this.dataGrid1.DataSource = q
                ._(q["RegionID"] + 10)
                ._("RegionDescription")
                .Asc("RegionID")
                .GetDataTable();

SQL 输出

SELECT 
    [Region].[RegionID] + 10 AS [RegionID],
    [Region].[RegionDescription]
FROM Region 
 ORDER BY RegionID ASC 

14.计算列的乘法运算

Query q = new Query("Region");
  this.dataGrid1.DataSource = q
                ._(q["RegionID"] * 2 + 5)
                ._("RegionDescription")
                .Asc("RegionID").GetDataTable();

SQL   输出

SELECT 
    [Region].[RegionID] * 2 + 5 AS [RegionID],
    [Region].[RegionDescription]
FROM Region 
 ORDER BY RegionID ASC

15.计算列的括弧运算

Query q = new Query("Region");
            this.dataGrid1.DataSource = q
                ._((q["RegionID"] + 5)*2)
                ._("RegionDescription")
                .Asc("RegionID").GetDataTable();

SQL  输出

SELECT 
    ([Region].[RegionID] + 5)  * 2 AS [RegionID],
    [Region].[RegionDescription]
FROM Region 
 ORDER BY RegionID ASC 

16.计算列的自增运算(自减运算同自增略)

Query q = new Query("Region");
            QueryColumn col = q["RegionID"];
            col = col ++;
            this.dataGrid1.DataSource = q
                ._(col)
                ._("RegionDescription")
                .Asc("RegionID").GetDataTable();

SQL 输出

SELECT 
    [Region].[RegionID] + 1 AS [RegionID],
    [Region].[RegionDescription]
FROM Region 
 ORDER BY RegionID ASC 

下一篇

NQL.Net 简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. Unity上使用Linq To XML
  2. python变量进阶(可变不可变,局部变量和全局变量)
  3. Spring 核心和容器的一般更新
  4. 论文自动转代码!IBM印度大三实习生搞了个神奇研究(已中AAAI)
  5. mysql启动日志指令_简单整理MySQL的日志操作命令
  6. html5world笔记
  7. java校园导航_基于VRML和JAVA的虚拟校园漫游导航系统的设计和实现
  8. oracle 百分比换算问题
  9. iOS开发中图片的模糊处理
  10. 51cto python数据分析系列课程 55g_Python 3 数据分析与挖掘系列课程完整版
  11. 外贸常用邮箱有哪些?163mail邮箱适合外贸用吗?
  12. ios开发html转图片,iOS | PPT 转图片(UIImage) 解决方案
  13. mac os 录屏快捷键_Mac录屏软件集合,自带不够专业来凑
  14. Codeforces Round #708 (Div. 2)B. M-arrays
  15. JavaScript贷款计算器
  16. 移动端h5 顶部菜单栏_手机界面设计中12种常用布局 - 轩枫阁
  17. 计算机术语sage什么意思,Sage Sage的意思解释|Sage是什么意思 -我酷百科
  18. 使用Git上传项目到码云
  19. 中文科技论文写作技巧总结
  20. HP DL380G9 iLO降级Degrated及存储失败storage Failed报错如何解决?

热门文章

  1. JAVA程序获取Tomcat的运行状态
  2. 计算机学科技术前沿:第31次中国互联网络发展状况统计报告
  3. LA 5842 Equipment (状态压缩+dp)
  4. 为 iOS 6 量身打造 Apps
  5. 随笔1:音频编解码科学家
  6. mysql语句大全(2)
  7. [CSS]打败 IE 的葵花宝典:CSS Bug Table
  8. SEO优化之——html页面相关总结
  9. JSONObject跟JSONArray来自不同的包会有不同的功能
  10. linux的Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理介绍