博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Xqk.Data数据框架开发指南:丰富的、灵活的查询方法(第二部分:适应不同数据库系统的查询)...
阅读量:6388 次
发布时间:2019-06-23

本文共 1845 字,大约阅读时间需要 6 分钟。

hot3.png

在上篇文章《》提到,针对不同的开发任务,Xqk.Data数据框架提供了丰富的、灵活的查询方法,文章还介绍了一些查询方法,在这些方法中,大部分都有一个共同的whereStr参数,该参数用来表明查询条件,即SQL语句中紧跟WHERE关键字的部分。需要注意的是,不同的数据库系统都有一些特定的行为。因此,如果代码要想适应不同的数据库系统,请确保提供的whereStr能在不同数据库系统下都能正确执行,且能够得到相同的结果或行为,或者为不同的数据库系统提供不同的whereStr值。

DbTable<TEntity>类为每个使用whereStr查询方法提供了相应的SqlExpression类型whereExpr参数的重载方法。 如:

public TEntity[] Select(SqlExpression whereExpr); public TEntity SelectSingle(SqlExpression whereExpr); public T SelectValue
(string fieldname, SqlExpression whereExpr); public T[] SelectFieldValues
(string field, SqlExpression whereExpr);

Xqk.Data框架的SqlExpression类被设计成能适应不同的数据库系统。使用SqlExpression参数能确保代码能在不同数据库系统下都能正确执行,且能够得到相同的结果或行为。

SqlExpression,即SQL表达式。包含3个属性:Operate,Left,Right,对应于SQL表达式的操作符,左操作数和右操作数。

Operate 表示操作符,其类型为SqlExpressionOperate枚举,定义如下:

public enum SqlExpressionOperate{    And, Or, Not,     Equal, Greater, Lower, NotEqual, NotGreater, NotLower,     Comma, Text,     StartsWith}

Left表示左操作数,其类型为string,一般是数据列的名称。

Right表示右操作数,其类型为object,一般需要根据操作符来判断。

虽然SqlExpression提供了公共构造函数,但不建议用构造函数来生成SqlExpression实例,而应该使用Xqk.Data数据框架提供的一整套与SQL表达式操作符相对应的静态函数。例如,在第一个例子中,我们可以使用以下的一些查询表达式:

  • _DbtPerson.Select("ismale=1") //查询所有性别为男性的人
    _DbtPerson.Select( SqlExpression.Equal("ismale",1))
  • _DbtPerson.Select("height>103 and ismale=0") //查询所有身高超过103的女性
    _DbtPerson.Select( SqlExpression.And(
    SqlExpression.Greater("height",103),
    SqlExpression.Equal("ismale",0)
    ));

看上去,使用SqlExpression比使用string要复杂,但是不要忘了,使用SqlExpression的一个主要目的是为适应不同的数据库系统。下面就以StartsWith表达式为例来说明这个重要的特点。

为了查询数据表中姓“张”的人,在MySQL中我们可以用

            instr(`name`,"张")=1; 或 substr(`name`,1,1)="张"
而在SQLite下只能用
            substr(`name`,1,1)="张"
在Sql Server中要用
            substring(`name`,1,1)="张" 或 charindex("张",name)=1;
所以必须为不同的数据库系统提供不同的whereStr,而使用SqlExpression,则用
            SqlExpression.StartsWith("name", "张")
就可以在不同数据库系统中实现查询name列以张开头的记录。

转载于:https://my.oschina.net/pppzhou/blog/34684

你可能感兴趣的文章
Oracle SQL之--多表查询基础用法
查看>>
图形化插件对Eclipse的版本要求
查看>>
两个关于数列的Python脚本(斐波那契数列和猴子吃香蕉类问题)
查看>>
olabuy-时光从来素默,内心应保持一份素淡与简静
查看>>
Spring Batch Bean 校验 API 支持
查看>>
你的成绩来着于你的努力与决心—PMP
查看>>
kux文件怎么打开 苹果手机如何观看kux视频
查看>>
Python中的urllib.request模块
查看>>
第九课 《说人话》
查看>>
js对象数组排序
查看>>
如何实现在展示商品时,放大商品细节
查看>>
uboot boot流程分析
查看>>
如何学习PHP整个体系的?
查看>>
css三角形实现写法全攻略收集
查看>>
Enterprise and the press public MBT Fora
查看>>
js常用代码整理
查看>>
富文本编辑器TinyMCE
查看>>
01_vue实例_数据_方法
查看>>
“穿越”——正则表达式
查看>>
使用 find 命令实现高级排除需求
查看>>