NQL.Net 简介

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

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

数据库配置 

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

 

  导入NQL包 : using NDO;

1.Filter 过滤器

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

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

None.gif SELECT    *  
None.gif
FROM  Products 
None.gif
WHERE  
None.gif    UnitPrice
* UnitsInStock  >= 1000

2.邦定参数的Filter 过滤器

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

SQL 输出

None.gif SELECT    *  
None.gif
FROM  Products 
None.gif
WHERE  
None.gif    UnitPrice
* UnitsInStock  >= @AA

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

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

SQL 输出

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

4.子查询的运用

None.gif Query qryCustomer  =   new  Query( " Customers " )
None.gif                .SelectColumn(
" CustomerID " )
None.gif                .Where(
" ContactTitle " , " Owner " );
None.gif
None.gif            
this .dataGrid1.DataSource  =   new  Query( " Orders " )
None.gif                .NewWhere(
" ShipVia " , 1 )
None.gif                .And(Ex.In(
" CustomerID " ,qryCustomer)).GetDataTable();

SQL 输出

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

5.模糊查询

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

SQL  输出

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

6.投影和多表连接操作

 

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

 

SQL 输出

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

7.简单的插入查询

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

SQL 输出

None.gif INSERT   INTO   [ Region ]   VALUES  ( 
None.gif    @RegionID,@RegionDescription
None.gif)
None.gif
None.gif
SELECT    *  
None.gif
FROM  Region 

8.插入语句2

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

SQL 输出

None.gif INSERT   INTO   [ Region ]  (
None.gif    RegionID,RegionDescription
None.gif
VALUES  (
None.gif    @RegionID,@RegionDescription
None.gif)
None.gif
None.gif
SELECT    *  
None.gif
FROM  Region 
None.gif

9.删除

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

SQL 输出

None.gif DELETE   FROM   [ Region ]
None.gif
WHERE  
None.gif    
[ Region ] . [ RegionID ]    =  @RegionID
None.gif
None.gif
SELECT    *  
None.gif
FROM  Region 
None.gif 
ORDER   BY  RegionID  ASC  

10.删除2

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

SQL 输出同上

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

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

SQL 输出同上

12. 更新操作

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

SQL 输出

None.gif UPDATE   [ Region ]   SET  
None.gif    
[ Region ] . [ RegionDescription ] = @RegionDescription
None.gif
WHERE  
None.gif    
[ Region ] . [ RegionID ]    =  @RegionID
None.gif
None.gif
SELECT    *  
None.gif
FROM  Region 
None.gif 
ORDER   BY  RegionID  ASC  

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

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

SQL 输出

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

14.计算列的乘法运算

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

SQL   输出

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

15.计算列的括弧运算

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

SQL  输出

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

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

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

  SQL 输出

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

下一篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值