最近在弄三层结构的系统,首先用了com+组件,但这个东西用在局域网还行,用到广域网就有问题了.
然后尝试webservice(dll写好了)封装,.NET方面不太熟悉,力不从心.总之一个郁闷呐.
还想到用winsock之类,下载一个"网络数据集"控件看了下,未果.
故征求一下: 三层结构内中间层与应用层的交互方法.
然后尝试webservice(dll写好了)封装,.NET方面不太熟悉,力不从心.总之一个郁闷呐.
还想到用winsock之类,下载一个"网络数据集"控件看了下,未果.
故征求一下: 三层结构内中间层与应用层的交互方法.
客户端只要安装这个程序,就可以用 ADO 实现远程数据访问了。
模拟 Fields 集合的时候被卡住了,发现在 VC 下弄 VB 的集合的概念
的确不容易,要去弄 COM 模型(东西太多了,没吃透)。后来就在 VB
中模拟了一个库,仿 ADO 的类库,里面多了一个 NetworkClass 类,
使用是这样的:Dim NetObj As New NetworkClass
Dim Conn As New NetConnection
Dim rs As New NetRecordset
If NetObj.Connect("127.0.0.1",999,"PASSWORD")=True Then
If Conn.Open_("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
"D:\uu.mdb;Persist Security Info=False", NetObj)=True Then
rs.Open_ "Select * From 表1",Conn,3,3
rs.AddNew
rs!字段1 = "测试"
rs.UpdateBatch
rs.Close_
Conn.Close_
End If
NetObj.Close_
End If
Set rs = Nothing
Set Conn = Nothing
Set NetObj = Nothing看起来和用 ADO 差不多,但是看到 Open_ 和 Close_ 这些方法的名称,怎么感觉
都不爽,所以一开始才想用 VC 弄,但是 VC 水平有限,就只有这么弄了。
后来看了很多资料,发现类似于“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\uu.mdb;Persist Security Info=False”这种东西都是用 OLEDB 提供
者的方式弄的。所以我现在也在看这方面的资料。直接用 ADO 效果要比模拟的好得多,
,呵呵.
http://download.csdn.net/source/1977527
S -> C 询问 CONN 实例ID(由CONN创建时由服务器分配取得记录在CONN对象的属性中)
C -> S 发送 CONN 实例 ID
S -> C 询问发送长度
C -> S 发送SQL语句字节长度以及打开方式的参数
S -> C 告知准备好接收
C -> S 发送SQL语句内容
S -> C 告知 Fields 集合的数量
请求接收具体数据部分
C -> S 请求接受第一个 Field 内容
S -> C 告知 Field 的类型及数据大小等相关参数
C -> S 准备好接收数据
S -> C 发送第一个Field内容(以数据流的方式发送)
C 端收到数据将处理自己的Fields集合内容
重复请求接收具体数据部分
完成后C短告知服务器任务完成,组件方法返回,服务器继续等待命令
...
S -> C 询问 CONN 实例ID(由CONN创建时由服务器分配取得记录在CONN对象的属性中)
C -> S 发送 CONN 实例 ID
S -> C 询问 RS 实例ID(由RS创建时由服务器分配取得记录在RS对象的属性中)
C -> S 发送 RS 实例 ID
...
方正的一个大型项目的架构就类似,中间层的dll都放在一台电脑上,然后其他的电脑都注册那台电脑的dll。
大不了现学现用呗~
不怕麻烦就用楼上的那种方式,把底层代码再写一遍。我还是感觉你的这个项目换BS好处理一些。
既然是三层结构,就应当考虑用B/S结构,客户端基本不用安装程序,仅通过IE浏览器登陆系统,这样只需要配好中间件服务器,中间件服务器可以直接访问数据库服务器.这个好处不言而喻
如果是ORACLE数据库,可以直接使用tuxedo中间件。
如果是SQL SERVER,且使用VB作为开发语言,则可以先实现SOCKET通讯,然后实现自定义协议的序列化和反序列化,最后实现数据库对象的序列化和反序列化。数据流载体可以使用XML,也可以自定义,不过感觉还是使用现有的技术如WEB SERVICE来得方便。
作用技术尝试,ADO提供了OLE DB Provider编程技术,对于实现数据库访问提供了技术支持;此外,ADO的Recordset对象支持从XML中加载数据,支持断开连接的记录集,还支持事件,这都对客户端数据库对象的缓存提供了支持。