zoukankan      html  css  js  c++  java
  • 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为例,其中的例子都是我做过严格的测试.

    数据库配置 

    <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 

    下一篇

  • 相关阅读:
    通过 VB5 创建 ActiveX DLL 文件并用 ASP 调用一例
    Autocad VBA初级教程
    自学资料第一集
    Linux虚拟化:10个不得不爱的理由
    EXCEL VBA编程的一些小结
    FAQ 工作薄及工作表
    很重要的EXCEL使用技巧
    Excel VBA编程的常用代码
    VBA生成一个CorelDraw工具栏
    支付宝,网银在线,快钱 3大支付接口的集成与对比,统合实现
  • 原文地址:https://www.cnblogs.com/netcasewqs/p/544096.html
Copyright © 2011-2022 走看看