C#+WinForm+SQL Server 统计所有用户在线情况

问题描述

不使用Socket,不恒占用SQLServer连接。要怎么弄?谢谢!我知道的:心跳包方法:用户登录后,后台线程5秒更新一次Person表中的LiveTime到getdate()updatePersonsetLiveTime=getdate()whereLoginName=@LoginName;

然后设计OnlinePerson视图:select*fromPersonwheredatediff(s,LiveTime,getdate())>11;

但这样有个问题:当客户端网络不佳,后台线程更新时间就有可能大于10s或20s.

解决方案

解决方案二:
。。。网络问题不要用软件思维去解决。
解决方案三:
写接口定时传递
解决方案四:
记得以前学asp.net有这种类似的题目
解决方案五:
可不可以用SQLJob来实现这种控制?
解决方案六:
希望给点建议
解决方案七:
哪有这么玩的。。。简单点,登陆时,调用HTTP自己写一个接口进行登陆,接口返回登陆是否成功。1、登陆成功后接口编写代码记录在线人员列表等等。2、用户需要访问接口获取数据吧?如果超过10分钟什么什么的,就判定为不在线了。2、用户定时访问某个接口告诉服务器说自己在线。3、然后网络不佳,,不至于吧亲爱的,再不佳访问个接口可能也就是1kb数据都不到的事情,可能是别的地方卡了,可以找找看。还有咯直接访问数据库去更新,人数多了这个压力不小勒,用接口好点,或者用remoting或者用wcf~~当然最简单的还是用ASP.NET咯
解决方案八:
“客户端网络不佳”算是在线还是不在线呢?如果网络一直不佳,是一直在线还是一直不在线呢?这是个业务问题。如果你只是盯着代码,那么你就根本不认得自己已经写完的代码了。
解决方案九:
比如说你把11秒改为11“分钟”,那么假设恰好11分钟零1秒又有心跳了,怎么算呢?算是网络不佳么?那么你这个“网络不佳”就是个悖论,就像说“我说的是谎言”,你说我有没有说谎呢?纠结这个就是一种精神洁癖了。其实如果以11秒为规范,那就是“现在”用11秒来判断,大不了将来可以调整这个尺度。但是对于说什么“网络不佳”的必须是可以逻辑上说得通的,要让可以成事的人来决定尺度,而不能让永远败事儿的人来替你做决定。
解决方案十:
另外说一下你的OnlinePerson视图的代码,可能你比较随意,也可能是oracle之类系统造成的问题,写这类代码应该要使用能够用到索引的表达式,不要再比较表达式的左边随便用函数,因为这不能用到索引,会对性能产生严重影响(比如说会慢1万倍)。

时间: 2025-01-26 13:39:37

C#+WinForm+SQL Server 统计所有用户在线情况的相关文章

SQL Server用别名用户的安全问题

SQL Server有很多很好用的小功能,但是有时候这些功能反过来给你制造麻烦.其中一个这样的问题是别名用户的使用.本技巧教你如何在数据库中建立别名用户时找到安全漏洞,不过在SQL Server 2008种不推荐这个功能. 首先,你可以对每个数据库运行下面的简单查询或者针对所有数据库操作它来运行以便找到带有"dbo"访问权限的用户. SELECT DISTINCT DB_NAME() DATABASE_NAME, SU.NAME DATABASE_USERNAME FROM SYSUS

终止SQL Server中的用户进程方法

一.情景:在很多情况下,往往会要求数据库管理员终止SQL Server中的用户进程.本文将为大家介绍如何创建一个简单的存储过程来实现同时终止多个会话.结束连续的会话和结束连接到数据库的所有会话等功能. 在很多情况下,往往会要求数据库管理员终止SQL Server中的用户进程,例如在停止某个数据库的运作时,或者还原数据库之前,或者长时间运行活动事务等情况下.数据库管理员通常会使用SQL Server中提供的"KILL"命令来完成任务. 但是,SQL Server提供的"KILL

sql server统计一个字段出现的次数的问题

问题描述 sql server统计一个字段出现的次数的问题 从选课表和课程表中查询每门选修课的人数,查询结果中显示人数.课程名称,按人数降序排序sc表sid cid grade2005216001 16020010 96.02005216001 16020011 80.02005216002 16020010 67.02005216003 16020012 78.02005216003 16020013 87.02005216003 16020014 85.02005216111 1602001

图片-SQL server创建新用户出现问题,如何解决?

问题描述 SQL server创建新用户出现问题,如何解决? 解决方案 XZU1是Windows登陆的用户名表现形式,要Windows(域或本机)有这个用户才行.不能从SqlServer去创建操作系统的用户

sql-关于Sql server如何在修改数据后响应到客户端(Winform+Sql server)

问题描述 关于Sql server如何在修改数据后响应到客户端(Winform+Sql server) 不需要客户段主动循环查询数据库数据是否更改,要求做到数据库发生更改时响应客户端,随即客户端做出相应的指令 解决方案 我也有和你同样的问题,如果有人回答了,请麻烦你通知我一声好么,谢谢了先.

SQL Server中授予用户查看对象定义的权限

SQL Server中授予用户查看对象定义的权限   在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数.视图授予查看定义的权限,那么就像下面脚本所示,比较繁琐:     GRANT VIEW DEFINITION ON  YOUR_PROCEDURE TO   USERNAME;   GRANT VIEW DEFINITION ON  YOUR_FUNCTION TO USERNAME;   GRAN

SQL Server 2008 R2用户'sa'登录失败(错误18456)

SQL Server 2008 R2用户'sa'登录失败(错误18456),如下图: 解决办法: 1.首先用windows身份登录,有如下界面: 2.右键实例-->属性,选择[安全性],选择身份验证方式: 3.右键实例-->[重新启动] 4.选择[安全性]-->[登录名]-->[sa] 5.双击[sa],出现下面视图,点击[常规],设置新的密码 6.选择[状态],修改为如下设置 重新登录即可,如果还是提示标题的错误,可以在登录的时候不使用sql server记忆的密码,自己载输入一

SQL SERVER统计服务器所有的数据库(数据库文件)、表(表行数)、字段(各字段)等详细信息

原文:SQL SERVER统计服务器所有的数据库(数据库文件).表(表行数).字段(各字段)等详细信息 USE STAT GO SET NOCOUNT ON IF EXISTS(SELECT 1 FROM SYS.TABLES WHERE TYPE='U' AND name='DBInfo') DROP TABLE DBInfo IF EXISTS(SELECT 1 FROM SYS.TABLES WHERE TYPE='U' AND name='ColumnsInfo') DROP TABLE

SQL Server 2005/2008 用户数据库文件默认路径和默认备份路径修改方法

以下仅为参照,如果有多个实例,可能会有些许不同: 本环境是SQL Server 2005 Standard Version 64-bit 和 SQL Server 2008 Standard Version 64-bit 双实例同时安装在一个 Windows Server 2008 Standard Version 64-bit OS上: 代码 复制代码 代码如下: Windows Server 2008 Standard Version 64-bit SQL Server 2005 Stand