SQL查询

本文将介绍直接使用SQL语句的查询使用方法,主要有2种方式:

  • XmlCommand
  • CPQuery



XmlCommand

如果希望 SQL代码与C#代码分离,我们可以将复杂的SQL语句放在XML文档中,例如以下片段:

<XmlCommand Name="batchDelete">
    <Parameters>
        <Parameter Name="@CustomerID" Type="Int32" />
    </Parameters>
    <CommandText><![CDATA[
    delete from Customers where CustomerID > @CustomerID
    ]]></CommandText>
</XmlCommand>

然后可以这样调用它:

public class CustomerBLL : BaseBLL
{
    public async Task<int> BatchDelete(int id)
    {
        var args = new { CustomerID = id };
        return await dbContext.XmlCommand.Create("batchDelete", args).ExecuteNonQueryAsync();
    }
}

补充说明:

  • 一个XML文件中可以包含多个XmlCommand节点
  • XML文件的取名没有特殊要求,扩展名要求是 .config
  • XML文件编码要求是 UTF-8 with BOM
  • 多个XML文件中的XmlCommand节点名称不能相同
  • 建议使用DataTools来维护XmlCommand,自然符合以上所有要求



CPQuery

CPQuery: Concat Parameterized Query,

设计意图可参考:CPQuery, 解决拼接SQL的新方法

使用示例:

public class CustomerBLL : BaseBLL
{
    public async Task<int> BatchDelete2(int id)
    {
        string sql = "delete from Customers where CustomerID > @CustomerID";
        var args = new { CustomerID = id };
        return await dbContext.CPQuery.Create(sql, args).ExecuteNonQueryAsync();
    }
}