多客户端访问一个数据库

时间:2022-11-24 19:27:25
我想做一个vc/mfc访问sql server2005数据库的,多用户端访问一个数据库的。
c/s结构,会有访问冲突的问题吧?
用什么方法比较好呢?需要考虑什么问题呢?
希望大家提供一下实例。
请详细讲解一下

16 个解决方案

#1


设置线程锁或是数据库锁,

对于访问同一个数据的话,之允许一个用户连接,其他设置等待~~~

#2


数据库本身会有读写锁等来保护...

#3


可是像很多c/s结构的软件,难道就是只能允许一个用户进行链接吗

#4


另外,如果有访问冲突的情况要怎么办?

#5


数据库自身会有控制,你不用担心

#6


补充一下,我的数据访问采用的vc/mfc+ado,理论上ado是可以支持远程数据库访问,
主要问题在于,当多个客户端同时访问数据库的时候会出现问题,如访问冲突之类。

#7


1、MFC不是线程安全的;
2、ADO、OleDB等均不是线程安全的;

so, One Thread One DB Connection. Then you can do anything you want.

#8


数据库都有冲突考虑,主要你说的冲突是什么样的冲突,你光说冲突谁能知道什么意思

#9


就是比如我的客户端会在一个动作中,分为a,b,c三个需要进行数据库操作的动作,其中某些语句需要较长时间执行,那么这样的情况下,另一个客户端做了其他的动作,也需要访问数据库,这时候,那个客户端就没法做了。

可是市面上很多c/s结构的软件产品,也不可能都只能一个客户端访问吧?

#10


给你举个例子:
    线程A有4个Client需要访问数据库,线程B有5个Client需要访问数据库。
    你在线程A中创建一个DB Connection,这4个Client共享这个DBConnection。
    同理,线程B中也创建一个DBConnection,这5个Client共享这个DBConnection。
    这样,不管你怎么操作,都不会出问题。

    当然,如果你想问N个Client访问同一条数据库记录时有逻辑上的混乱,则这是另外一个问题了,你可以去看看ado的相关文档。去看看“锁定类型”和“键值类型”。

#11


引用 10 楼 squall_zy 的回复:
给你举个例子:
  线程A有4个Client需要访问数据库,线程B有5个Client需要访问数据库。
  你在线程A中创建一个DB Connection,这4个Client共享这个DBConnection。
  同理,线程B中也创建一个DBConnection,这5个Client共享这个DBConnection。
  这样,不管你怎么操作,都不会出问题。

  当然,如果你想问N个Cl……

同一个数据库可以同时做多个连接吗?如果可以最多可以做几个连接?

还有这种情况,就是像刚才说的,可能只是想显示某一个结果,但是这个结果可能由3条语句,做3次数据库操作才能完成,那么可能a客户端在做这个功能的时候,刚走到第一个语句,而b客户端刚好也开始进行计算,这种情况也有可能的呀。

#12


可以多连接。

好吧,我上面讲的都是安全问题,不是程序逻辑问题。

如果你是程序逻辑出了问题,得自己去研究代码。
对资源产生竞争时,可以加锁。

#13


引用 12 楼 squall_zy 的回复:
可以多连接。

好吧,我上面讲的都是安全问题,不是程序逻辑问题。

如果你是程序逻辑出了问题,得自己去研究代码。
对资源产生竞争时,可以加锁。

多连接通过什么来实现的?完成端口?

#14


在同一时刻内只能有一个线程访问你的数据库资源,其他线程如果连接的话处于等待状态。

#15


以下两种模式,可供参考:
1. 裸客户端模式。客户端直接调用比如ADO来访问数据库,这样就涉及到并发访问数据库的问题,数据库可支持多少个并发访问,各种版本的数据库不尽相同。
2. 客户端--后台服务器的C/S模式。通过建立socket连接的方式,处理客户端和服务器的数据交互。后台服务器在本地根据性能需要,创建一定的ADO连接,访问数据库,并返回结果给客户端。

#16


多客户端连接后台服务端,服务端查询结果返回客户端

#1


设置线程锁或是数据库锁,

对于访问同一个数据的话,之允许一个用户连接,其他设置等待~~~

#2


数据库本身会有读写锁等来保护...

#3


可是像很多c/s结构的软件,难道就是只能允许一个用户进行链接吗

#4


另外,如果有访问冲突的情况要怎么办?

#5


数据库自身会有控制,你不用担心

#6


补充一下,我的数据访问采用的vc/mfc+ado,理论上ado是可以支持远程数据库访问,
主要问题在于,当多个客户端同时访问数据库的时候会出现问题,如访问冲突之类。

#7


1、MFC不是线程安全的;
2、ADO、OleDB等均不是线程安全的;

so, One Thread One DB Connection. Then you can do anything you want.

#8


数据库都有冲突考虑,主要你说的冲突是什么样的冲突,你光说冲突谁能知道什么意思

#9


就是比如我的客户端会在一个动作中,分为a,b,c三个需要进行数据库操作的动作,其中某些语句需要较长时间执行,那么这样的情况下,另一个客户端做了其他的动作,也需要访问数据库,这时候,那个客户端就没法做了。

可是市面上很多c/s结构的软件产品,也不可能都只能一个客户端访问吧?

#10


给你举个例子:
    线程A有4个Client需要访问数据库,线程B有5个Client需要访问数据库。
    你在线程A中创建一个DB Connection,这4个Client共享这个DBConnection。
    同理,线程B中也创建一个DBConnection,这5个Client共享这个DBConnection。
    这样,不管你怎么操作,都不会出问题。

    当然,如果你想问N个Client访问同一条数据库记录时有逻辑上的混乱,则这是另外一个问题了,你可以去看看ado的相关文档。去看看“锁定类型”和“键值类型”。

#11


引用 10 楼 squall_zy 的回复:
给你举个例子:
  线程A有4个Client需要访问数据库,线程B有5个Client需要访问数据库。
  你在线程A中创建一个DB Connection,这4个Client共享这个DBConnection。
  同理,线程B中也创建一个DBConnection,这5个Client共享这个DBConnection。
  这样,不管你怎么操作,都不会出问题。

  当然,如果你想问N个Cl……

同一个数据库可以同时做多个连接吗?如果可以最多可以做几个连接?

还有这种情况,就是像刚才说的,可能只是想显示某一个结果,但是这个结果可能由3条语句,做3次数据库操作才能完成,那么可能a客户端在做这个功能的时候,刚走到第一个语句,而b客户端刚好也开始进行计算,这种情况也有可能的呀。

#12


可以多连接。

好吧,我上面讲的都是安全问题,不是程序逻辑问题。

如果你是程序逻辑出了问题,得自己去研究代码。
对资源产生竞争时,可以加锁。

#13


引用 12 楼 squall_zy 的回复:
可以多连接。

好吧,我上面讲的都是安全问题,不是程序逻辑问题。

如果你是程序逻辑出了问题,得自己去研究代码。
对资源产生竞争时,可以加锁。

多连接通过什么来实现的?完成端口?

#14


在同一时刻内只能有一个线程访问你的数据库资源,其他线程如果连接的话处于等待状态。

#15


以下两种模式,可供参考:
1. 裸客户端模式。客户端直接调用比如ADO来访问数据库,这样就涉及到并发访问数据库的问题,数据库可支持多少个并发访问,各种版本的数据库不尽相同。
2. 客户端--后台服务器的C/S模式。通过建立socket连接的方式,处理客户端和服务器的数据交互。后台服务器在本地根据性能需要,创建一定的ADO连接,访问数据库,并返回结果给客户端。

#16


多客户端连接后台服务端,服务端查询结果返回客户端