积极答复者
c# 同时访问数据库

问题
答案
-
你好!
如果你Sql Server数据库,可以参考这里:
http://msdn.microsoft.com/zh-cn/library/ms345598.aspx
希望对你有帮助!
周雪峰- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:03
-
可以通过Sql 语句来设置:
alter database [dbname] set single_user
周雪峰- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:03
-
1. 在连接上控制用户
可以自己写一个Connection类, 然后使用队列进行判断,当连接超过最大数值时,则不允许再次连接
2. 在程序内部控制用户
在数据库里放置两个字段,分别记录该用户起始登陆时间及当前时间,然后进行判断
Simple life, Simple love ..- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:03
-
如果想同时只有一个用户访问数据库,可以让数据库只有一个连接
这是数据库访问的单例模式,
你可以去Google搜下 数据库单例模式
努力+方法=成功- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:04
-
有个问题你得说清楚,你是要要求你自己的程序中只有一个用户访问还是要求数据库中最多只有一个用户访问。
对于前者,数据库的单例模式就可以解决,但是单例模式只能约束你自己的程序,你将无法阻止其他用户访问该数据库。
对于后者,则有两种理解,一种是你希望在你操作数据库时没有其他人来打扰,但是当你的事务运行完毕后并不介意其他用户读写,这种情况用锁就好了。(这是个技术活,你得多看看资料,有关锁的,还有就是要注意死锁和效率问题。);另一种理解是只要你的应用程序还在,你就不允许其他用户操作数据库,这个版主周雪峰已经说得很清楚了,就是改数据属性(alter database [dbname] set single_user),不过这个效率是最低的。- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:04
-
如果是同时只有一个用户访问某个DB, 那么应该直接在数据库上做控制, 把数据库设置为单用户模式
程序上去做控制的代价有点高, 通常的做法是, 你需要足够的权限, 然后去查 master..sysprocess, 通过这个里面去看有没有" spid <> @@spid and dbid = db_id('你要控制的库名') " 的记录, 如果有的话, 说明已经有人在用了, 你就退出来并断开连接
当然, 这个控制不是很准确的, 因为诸如是从其他库跨库来访问之类的情况用这个是查不到的, 你可能需要更进一步去分析别的进程的T-SQL等.- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:04
全部回复
-
你好!
如果你Sql Server数据库,可以参考这里:
http://msdn.microsoft.com/zh-cn/library/ms345598.aspx
希望对你有帮助!
周雪峰- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:03
-
可以通过Sql 语句来设置:
alter database [dbname] set single_user
周雪峰- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:03
-
1. 在连接上控制用户
可以自己写一个Connection类, 然后使用队列进行判断,当连接超过最大数值时,则不允许再次连接
2. 在程序内部控制用户
在数据库里放置两个字段,分别记录该用户起始登陆时间及当前时间,然后进行判断
Simple life, Simple love ..- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:03
-
如果想同时只有一个用户访问数据库,可以让数据库只有一个连接
这是数据库访问的单例模式,
你可以去Google搜下 数据库单例模式
努力+方法=成功- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:04
-
有个问题你得说清楚,你是要要求你自己的程序中只有一个用户访问还是要求数据库中最多只有一个用户访问。
对于前者,数据库的单例模式就可以解决,但是单例模式只能约束你自己的程序,你将无法阻止其他用户访问该数据库。
对于后者,则有两种理解,一种是你希望在你操作数据库时没有其他人来打扰,但是当你的事务运行完毕后并不介意其他用户读写,这种情况用锁就好了。(这是个技术活,你得多看看资料,有关锁的,还有就是要注意死锁和效率问题。);另一种理解是只要你的应用程序还在,你就不允许其他用户操作数据库,这个版主周雪峰已经说得很清楚了,就是改数据属性(alter database [dbname] set single_user),不过这个效率是最低的。- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:04
-
如果是同时只有一个用户访问某个DB, 那么应该直接在数据库上做控制, 把数据库设置为单用户模式
程序上去做控制的代价有点高, 通常的做法是, 你需要足够的权限, 然后去查 master..sysprocess, 通过这个里面去看有没有" spid <> @@spid and dbid = db_id('你要控制的库名') " 的记录, 如果有的话, 说明已经有人在用了, 你就退出来并断开连接
当然, 这个控制不是很准确的, 因为诸如是从其他库跨库来访问之类的情况用这个是查不到的, 你可能需要更进一步去分析别的进程的T-SQL等.- 已标记为答案 Hong-Gang Chen - MSFTModerator 2009年12月10日 7:04