Functional Demos

查询数据演示

日志操作


一、基本说明:

        查询操作均以实体为主,如需查询多条记录,将会返回一个实体集合!现本框架已支持非常灵活的查询,所用到的查询条件,均使用 NameValueCollection 对象的键值对来传递,在使用 NameValueCollection 对象创建查询条件时,可以有三种参数形式:

1.直接设置某字段为查询条件:
    可以直接设置要查询的字段和条件值


//使用NameValueCollection必需先引用以下命名空间
using System.Collections.Specialized;

//创建查询条件对象
NameValueCollection conditionValue = new NameValueCollection();

//对于字段条件,也可以直接加上SQL的条件运算符,
//字段与运算符之间必须以空格隔开,如下
conditionValue["Name like"] = "winson";//查询Name里包括winson里记录
conditionValue["Age >"] = "20";        //查询Age大于20的记录
conditionValue["ID <="] = "5";         //查询ID小于等于5的记录

//实现左右模糊查询
conditionValue["Name like left"] = "winson";
//实现左模糊查询,相当于 Name like '%winson' 语句
conditionValue["Name like left"] = "winson";
//实现右模糊查询,相当于 Name like 'winson%' 语句


//也可以直接为字段设置查询条件,如不加运算符则为等于运算
conditionValue["Name"] = "winson";

//创建实体操作类
Test test = new Test();

//将条件对象传入直接获取查询结果,多个条件将会以 And 方式为条件查询
IList t=test.GetList(conditionValue);


2.使用自定义查询条件:
    为了让大家创建更灵活的查询条件,只要将 NameValueCollection 对象的键值设置为 where 即可输入任意组合的查询条件,条件值里不需要再输入 where 关键字了

//使用NameValueCollection必需先引用以下命名空间
using System.Collections.Specialized;

//创建查询条件对象
NameValueCollection conditionValue = new NameValueCollection();

//只要键值为 where 则可以输入任意查询条件,甚至可以加上排序条件
conditionValue["where"] = " name = 'winson' or id > 3 order by id desc";

//创建实体操作类
Test test = new Test();

//将条件对象传入直接获取查询结果
IList t=test.GetList(conditionValue);


3.使用自定义SQL语句:
    可以直接输入完整的SQL语句。其实这个功能主要是为了分页查询使用,一般情况下不需要直接输入完整的SQL语句了,因为上面提到的2种方式已基本上都够用了。只要将 NameValueCollection 对象的键值设置为 sql 即可输入完整的SQL语句

//使用NameValueCollection必需先引用以下命名空间
using System.Collections.Specialized;

//创建查询条件对象
NameValueCollection conditionValue = new NameValueCollection();

//只要键值为 sql 则可以输入完整的SQL语句
conditionValue["sql"] = "select * from test where name = 'winson' order by id desc";

//创建实体操作类
Test test = new Test();

//将条件对象传入直接获取查询结果
IList t=test.GetList(conditionValue);


4.使用 inorder 语句:
    可以直接使用 inorder 语句进行查询,方法也很简单,请看以下代码:

//使用NameValueCollection必需先引用以下命名空间
using System.Collections.Specialized;

//创建查询条件对象
NameValueCollection conditionValue = new NameValueCollection();

//只要键值里包含了 in 则可以以 in 语句进行查询
conditionValue["id in"] = "1,2,3,4,5";

//将键值设为 order 则可以进行排序查询,当然,排序方式也需要指定在条件里
conditionValue["order"] = "id desc";

//创建实体操作类
Test test = new Test();

//将条件对象传入直接获取查询结果
IList t=test.GetList(conditionValue);


5.使用 orand 条件:(3.3新功能)
    3.3版开始,即可以支持 orand 条件交互进行查询(之前全部默认为 and 条件),方法也很简单,请看以下代码:

//实现 or 条件操作符
//在需要 or 的2个条件之前添加以下语句
conditionValue["operator"] = "or";
//然后接着写需要匹配的条件
conditionValue["Title like"] = "title";
conditionValue["Content like"] = "content";
conditionValue["Name"] = "winson";
//注意:每个 or 条件只会匹配紧接着的2个条件,以上语句将产生以下的SQL语句:
// Title like '%title%' or Content like '%content%' and name='winson'
//从第三个条件起,如果没有设置 conditionValue["operator"] 条件,将自动恢复为 and 条件

二、操作步骤:

注:以下演示均以WinsonFrameDB数据库的 Test 表为例:

1、获取单个实体查询:


操作步骤如下:

a.引用以下命名空间:

using System.Collections.Specialized;
using Winson.EntityOP;
b.实例化一个实体操作类,此实体操作类已包括了实体类和所有相关的操作方法:
Test test = new Test();
c.创建查询条件:

//创建查询条件对象
NameValueCollection conditionValue = new NameValueCollection();

//对于字段条件,也可以直接加上SQL的条件运算符,
//字段与运算符之间必须以空格隔开,如下
conditionValue["Name like"] = "winson";//查询Name里包括winson里记录
conditionValue["Age >"] = "20";        //查询Age大于20的记录
conditionValue["ID <="] = "5";         //查询ID小于等于5的记录

//也可以直接为字段设置查询条件,如不加运算符则为等于运算
conditionValue["Name"] = "winson";
d.调用查询的方法:

//此方法有2个重载
//直接从数据库获取实体
TestDS t = test.GetEntity(conditionValue);

//从实体集合里获取
//先得到一个实体集合
IList entityList = test.GetList(null);//参数为null则获取所有实体记录
TestDS t = test.GetEntity(entityList, 3);//然后在集合里获取ID为3的记录
e.完整的代码如下:

//创建查询条件对象
NameValueCollection conditionValue = new NameValueCollection();

//对于字段条件,也可以直接加上SQL的条件运算符,
//字段与运算符之间必须以空格隔开,如下
conditionValue["Name like"] = "winson";//查询Name里包括winson里记录
conditionValue["Age >"] = "20";        //查询Age大于20的记录
conditionValue["ID <="] = "5";         //查询ID小于等于5的记录

//也可以直接为字段设置查询条件,如不加运算符则为等于运算
conditionValue["Name"] = "winson";

//此方法有2个重载
//直接从数据库获取实体
TestDS t = test.GetEntity(conditionValue);

//从实体集合里获取
//先得到一个实体集合
IList entityList = test.GetList(null);//参数为null则获取所有实体记录
TestDS t = test.GetEntity(entityList, 3);//然后在集合里获取ID为3的记录

2、获取实体集合:


获取实体集合步骤基本上与获取单实体步骤一样,只是最后调用的方法不同:

//以下是获取实体集合的几种方式
IList entityList = test.GetList(null);//参数为null则获取所有实体记录

IList entityList = test.GetList(conditionValue);//参数为conditionValue则根据条件获取

//同时还支持获取DataSet数据
DataSet entityDS = test.GetDataSet(null);
DataSet entityDS = test.GetDataSet(conditionValue);
如需分页获取数据,可使用以下方法,此方法的查询条件只能直接输入相关SQL语句,不支持 NameValueCollection 的构建:

IList LTest = test.GetList(limit, page, criteria, orderby, order);
参数说明:
limit 每页显示记录数
page 当前页
criteria 查询条件,如: " name='wnson' and age>20 "
orderby 排序字段
order 排序方式

3、将数据库里的图片文件读出:


在此也说一下如何从数据库里读出图片等二进制文件:

//引用命名空间
using Winson.Framework.Utility;

//从数据库获取实体
TestDS t = test.GetEntity(conditionValue);
//将图片字段取出
byte[] bytes = t.Pic;
//将二进制数据写到文件
Utility.writeFile(b, @"d:\temp\test.png");
三、效果演示:

获取实体:


请输入以下查询字段的条件,如为空时则不限制,所有字段将以 And 形式连接

姓名:
年龄:
内容:

       

由于此DEMO由于调用jqGrid(jQuery的插件)显示,因此并没用到 NameValueCollection 来构建查询条件,以下只例出主要代码

//获取分页数据
int totalpage = 0;
int page = Convert.ToInt32(Request["page"]);
int limit = Convert.ToInt32(Request["rows"]);
string orderby = Request["sidx"].Split('|')[0];
string criteria = Request["sidx"].Split('|')[1].Replace("+", " ");
string order = Request["sord"];

test = new Test();
//根据条件获取记录数
int totalCount = test.Count(criteria);
//获取实体集合
IList LTest = test.GetList(limit, page, criteria, orderby, order);