htm5-websocket实现数据查询应用

 

在之前的文章讲述了使用Websocket调用远程方式的功能,在这基础我们可以简单地使用WebSocket进行数据处理方面的应用;只需要在方法执行相关的数据库操作返回即可,结合jeasyui库所提供丰富的控件进行数据应用处理变得非常简单的事情.下面使用jeasyui和WebSocket实现一个查询Northwind数据订单的应用案例.

首先分析一下以下一个订单查询案例所需要的逻辑功能.

从以上的案例图中可以得到包括的功能如下:

1)雇员查询
2)客户查询
3)订单分页查询
4)订单明细查询

C#代码

针对以上功能可以实现简单的逻辑查询,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Handler
    {
        public IList<BLEmployee> ListEmployees()
        {
            Console.WriteLine("List Employees");
            IList<BLEmployee> items = new Expression().List<Employee, BLEmployee>();
            return items;
        }
 
        public IList<BLCustomer> ListCustomers()
        {
            Console.WriteLine("List Customers");
            IList<BLCustomer> items = new Expression().List<Customer, BLCustomer>();
            return items;
        }
 
 
        public IList<BLOrderDetail> GetOrderDetail(int orderid)
        {
            Console.WriteLine("GetOrderDetail   OrderID:{0}", orderid);
            return (Order.orderID == orderid).List<OrderDetail, BLOrderDetail>();
        }
 
        public OrderSearchResult ListOrder(OrdersSearch search)
        {
            Console.WriteLine("ListOrder Employee:{0}\t Customer:{1}", search.EmployeeID, search.CustomerID);
            OrderSearchResult result = new OrderSearchResult();
            Expression exp = new Expression();
            if (!string.IsNullOrEmpty(search.CustomerID))
                exp &= Customer.customerID.At() == search.CustomerID;
            if (search.EmployeeID > 0)
                exp &= Employee.employeeID.At() == search.EmployeeID;
            int count = exp.Count<Order>();
            result.Orders = exp.List<Order, BLOrder>(new Region(search.Page, search.PageSize));
            result.Count = count;
            return result;
        }
    }

借助于开源组件Smark.Data的功能,只需要编写简单的代码就能实现相应的数据查询逻辑处理.

JavaScript

定义websocket连接:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//创建连接
        function connect() {
            channel = new TcpChannel();
            channel.Connected = function (evt) {
                $('#dlgConnect').dialog('close');
                
                setTimeout(listEmployee, 50);
                setTimeout(listCustomer, 50);
                listOrder();
            };
            channel.Disposed = function (evt) {
                $('#dlgConnect').dialog('open');
            };
            channel.Error = function (evt) {
                alert(evt);
            };
            channel.Connect($('#txtHost').val());
        }

在连接创建完成事件中进行数据查询操作,由于连续进行3以上的websocket的发送操作会导致发送不成功,之于具体原因暂不清楚.所以只能通过setTimeout来控制初始化的数据查询.连接创建后就可以进行远程方法调用,进行数据查询操作具体相关代码如下:

雇员查询远程调用方法:

1
2
3
4
5
6
7
8
9
10
11
12
//雇员查询
        var callListEmployees = { url: 'Handler.ListEmployees', parameters: {} };
        function listEmployee() {
            channel.Send(callListEmployees, function (result) {
                result.data.unshift({ EmployeeID: 0, FullName: 'null' });
                $('#employees').combobox({
                    data: result.data,
                    valueField: 'EmployeeID',
                    textField: 'FullName'
                });
            });
        }

客户查询远程调用方法:

1
2
3
4
5
6
7
8
9
10
11
12
//客户查询
        var callListCustomers = { url: 'Handler.ListCustomers', parameters: {} };
        function listCustomer() {
            channel.Send(callListCustomers, function (result) {
                result.data.unshift({ CustomerID: '', CompanyName: 'null' });
                $('#customers').combobox({
                    data: result.data,
                    valueField: 'CustomerID',
                    textField: 'CompanyName'
                });
            });
        }

订单查询远程调用方法:

1
2
3
4
5
6
7
8
9
10
11
12
//订单查询
        var callListOrder = {
            url: 'Handler.ListOrder',
            parameters: { search: { EmployeeID: 0, CustomerID: null, Page: 0, PageSize: 10} }
        };
        function listOrder() {
            channel.Send(callListOrder, function (result) {
                $('#orders').datagrid('loadData', result.data.Orders);
 
                $('#pp').pagination('refresh', { total: result.data.Count });
            });
        }

订单明细远程调用方法:

1
2
3
4
5
6
7
8
9
10
//订单明细
        var callGetOrderDetail = { url: 'Handler.GetOrderDetail', parameters: {orderid:0} };
        function getOrderDetail() {
            channel.Send(callGetOrderDetail, function (result) {
             
                $('#gdOrderDetail').datagrid('loadData', result.data);
 
                 
            });
        }

总结

只需要以上简单的代码就可以实现一个订单查询功能,看上去和传统的ajax应用差不多,而这里使用的服务是基于websocket而不是webserver.

下载代码:WebSocket.Northwind.rar (1.03 mb)

演示地址:http://html5.ikende.com/northwind.htm

htm5-websocket实现数据查询应用的更多相关文章

  1. Django models .all .values .values_list 几种数据查询结果的对比

    Django models .all .values .values_list 几种数据查询结果的对比

  2. MVC实用架构设计(三)——EF-Code First(4):数据查询

    前言 首先对大家表示抱歉,这个系列已经将近一个月没有更新了,相信大家等本篇更新都等得快失望了.实在没办法,由于本人水平有限,写篇博客基本上要大半天的时间,最近实在是抽不出这么长段的空闲时间来写.另外也 ...

  3. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  4. SharePoint服务器端对象模型 之 使用CAML进展数据查询

    SharePoint服务器端对象模型 之 使用CAML进行数据查询 一.概述 在SharePoint的开发应用中,查询是非常常用的一种手段,根据某些筛选.排序条件,获得某个列表或者某一些列表中相应的列 ...

  5. .NET应用架构设计—面向查询服务的参数化查询设计(分解业务点,单独配置各自的数据查询契约)

    阅读目录: 1.背景介绍 2.对业务功能点进行逻辑划分(如:A.B.C分别三个业务点) 2.1.配置映射关系,对业务点配置查询契约(构造VS插件方便生成查询契约) 2.2.将配置好的映射策略文件放在调 ...

  6. Yii2 数据查询

    转载来自: http://www.yiichina.com/tutorial/95 数据查询 User::find()->all(); 此方法返回所有数据: User::findOne($id) ...

  7. 6、SQL Server 数据查询

    一.使用SELECT检索数据 数据查询是SQL语言的中心内容,SELECT 语句的作用是让数据库服务器根据客户要求检索出所需要的信息资料,并按照规定的格式进行整理,返回给客户端. SELECT 语句的 ...

  8. SQL Server 的表数据简单操作(表数据查询)

    --表数据查询----数据的基本查询-- --数据简单的查询--select * | 字段名[,字段名2, ...] from 数据表名 [where 条件表达式] 例: use 商品管理数据库 go ...

  9. asp.net mvc 数据查询赋值到文本框中

    大家做了很多文本框查询并且赋值回来 1.先是把数据对象查询结果后台,然后把对象赋值给对象在赋值回来前台页面 2.使用@html helerper 数据查询,使用 ViewContext.RouteDa ...

随机推荐

  1. Annotaion——深入理解注解类型

    什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metada ...

  2. Windows 2003 Server R2 x64 IIS6.0 eWebEditor无法显示的问题

    64位的操作系统安装成功后,一般IIS也是默认的64位的解析,所以将程序放到64位操作系统上的时候,会出现IIS错误,解决方案也非常简单,将64位IIS停止,启动32位的就可以了. 输入以下命令启用 ...

  3. python学习(六)

  4. SAP 多语言文本翻译

    SAP自己的东西都是有语言包的,针对很多语言有是有对应文本的翻译,巴特,比较不是专业的翻译,多以很多时候还是有这样那样的文本描述需要调整. 语言包怎么打就不说了,也不知道,知道也没打过... 标准界面 ...

  5. Delegate, NSNotification, KVO, Block

    delegate: 当我们第一次编写iOS应用时,我们注意到不断的在使用“delegate”,并且贯穿于整个SDK.delegation模式不是iOS特有的模式,而是依赖与你过去拥有的编程背景.针对它 ...

  6. c#关于捕获错误的问题

    一般捕获错误,采用try,catch,但是有时捕获的错误不明朗,完全不知道是什么错误,这是可以取消try,catch调试运行,找到错误后并修正后,再把try,catch加上.

  7. web.xml配置说明

    前言 首先,web.xml文件的作用是配置web项目启动时加载的信息.(web.xml并不是一个Web的必要文件,没有web.xml,网站仍然是可以正常工作的.) 而这些配置自然是通过标签来实现的, ...

  8. Homework 2.0

    一.第一题,要求是输入不同的字符的时候输出不同的结果,这道题主要是运用输入和输出语言还有判断语句,分别使用switch和if else来进行输入字符的判断,本体比较简单,注意定义输入变量的类型为cha ...

  9. Redis在Linux系统下的安装和启动

    详情可参见:https://blog.csdn.net/q1035331653/article/details/79077260 开机自启脚本参见:https://www.cnblogs.com/si ...

  10. 创建一个vue 项目 必备的几个插件

    第一步npm安装 首先:先从nodejs.org中下载nodejs 打开控制命令行程序(CMD),node -v 检查是否正常 使用淘宝NPM 镜像 npm  install  -g  cnpm  - ...