日期:2014-05-18  浏览次数:20627 次

Winfrom远程连接SQL Server问题
开发环境:VS2010(Winform)+SQL Server 2008 R2
客户端:通过本地安装程序,与服务进行数据交互。
问题:1、SQL语句方面应注意些什么?
  2、如何有效提升访问速度,比如用户执行一条查询,返回1000条以上的记录。
  3、某客户端操作数据后,其它客户端如何即时显示?
  4、某客户端操作数据时,其它客户端也操作,会不会有冲突,或者如何避免该情况?
  5、如何避免一个用户账号多点登录?
  6、连接字符串中的SQL Server账号,只使用一个会不会有冲突,也就是说所有用户都使用一个SQL Server账号。
  7、给用户使用的SQL Server账号给什么权限最合适?
   
级别低一次最多100分,问了这么多,如果分不够,另开贴给,谢谢大家!

------解决方案--------------------
1、为了以后扩展考虑,web与数据库程序分开部署。
能sql能写成存储过程的尽量写成存储过程,最大程度避免了sql注入。有利于提高
网站的访问速度。如果只是部署到一台服务器没有高
可用、高性能、高扩展说法了。
2、同时操作服务器同一数据并发性操作,事物控制了。
------解决方案--------------------
1、SQL语句方面应注意些什么?
多用存储跟视图,少用语句查询,防止注入以及其他问题
2、如何有效提升访问速度,比如用户执行一条查询,返回1000条以上的记录。
这个通常没有什么意外,我们系统百人在线,同时查询一个页面还没出现什么问题,加好索引,处理好事物一般没问题
3、某客户端操作数据后,其它客户端如何即时显示?
应该没办法,需要用户刷新,就是触发器也只是SQL部分的,C/S页面没法控制,如果你实时刷新,只能说那会造成大量死锁情况出现,服务器差点,也可能卡,这个没必要,尽量执行操作的时候,都再读取一遍数据库,例如修改页面,在传ID,查一下,然后赋值,不要直接用列表至赋值,就可以避免这边更改,那边没更改的问题。
4、某客户端操作数据时,其它客户端也操作,会不会有冲突,或者如何避免该情况?
肯定会有冲突,不过同一时间操作一般几率比较小,除非是大量数据操作,那就要用事物加回滚,防止死锁以及部分数据插入部分数据没更新保存,如果可以,你可以写成如果有相同任务执行,第二个等待。
5、如何避免一个用户账号多点登录?
这个不好避免,目前就是记录IP,登录验证IP或者MAC或者机器名等信息,如果不在同一个地方,提示。
6、连接字符串中的SQL Server账号,只使用一个会不会有冲突,也就是说所有用户都使用一个SQL Server账号。
不会吧,我们一直用一个,不过报表为b/s嵌入到c/s里,这两个的用户是不同的
7、给用户使用的SQL Server账号给什么权限最合适?
所需操作数据库的权限即可,至于具体权限根据所执行的操作赋予就好。
------解决方案--------------------
1、SQL语句方面应注意些什么?
--> 注意并发影响,webform有连接池,winform没有,最好设置数据库的最大连接数(user connections).

2、如何有效提升访问速度,比如用户执行一条查询,返回1000条以上的记录。
--> 建索引,服务器配置,网络传送性能,客户端机器性能.

3、某客户端操作数据后,其它客户端如何即时显示?
--> 刷新显示,或前端程序设置timer自动刷新.

4、某客户端操作数据时,其它客户端也操作,会不会有冲突,或者如何避免该情况?
--> 同时操作同一条记录时有冲突,只能等待.

5、如何避免一个用户账号多点登录?
--> 检查sys.dm_exec_sessions的login_name,如已登录则不予登录.

6、连接字符串中的SQL Server账号,只使用一个会不会有冲突,
也就是说所有用户都使用一个SQL Server账号。
--> 技术上不会有冲突,但这是系统设计的问题,看你想怎么做.

7、给用户使用的SQL Server账号给什么权限最合适?
--> 授予db_datareader,db_datawriter角色.