环境VB6.0 sp6 + ADODB 2.8
SQL - Server 服务器在远程计算机上安装(服务器100M带宽)
客户机使用ADSL与SQL服务器连接。
代码如下(以下代码毫无实际意义,只是为了试验其效率):
Dim Conn As Connection
Set Conn = New Connection
Conn.ConnectionString = "Provider=SQLOLEDB.1;User ID=sa;Password=77882447;" & _
"Initial Catalog=TEST;Data Source=61.233.xx.xx"
Conn.CursorLocation = adUseServer
Conn.Open
Dim Rs As Recordset
Set Rs = Conn.Execute("select * from 表1") '由于网络原因,此查询耗时2秒
Set Rs = Conn.Execute("select * from 表2")
Set Rs = Conn.Execute("select * from 表3")
Set Rs = Conn.Execute("select * from 表4")
Set Rs = Conn.Execute("select * from 表5")
Set Rs = Conn.Execute("select * from 表6")
Set Rs = Conn.Execute("select * from 表7")
Conn.Close执行以上7条查询操作,耗时10秒以上。有没有什么方法可以优化此速度?
使用存储过程也不行,难道使用宽带远程连接SQL服务器就这么低效吗?其实我想要的是一种客户机通过ADSL连接远程SQL-Server服务器,执行SQL查询的高效方案。也可以不用ADO,而用其它更高效的方法。但我只知道用ADO...望高手指导!
SQL - Server 服务器在远程计算机上安装(服务器100M带宽)
客户机使用ADSL与SQL服务器连接。
代码如下(以下代码毫无实际意义,只是为了试验其效率):
Dim Conn As Connection
Set Conn = New Connection
Conn.ConnectionString = "Provider=SQLOLEDB.1;User ID=sa;Password=77882447;" & _
"Initial Catalog=TEST;Data Source=61.233.xx.xx"
Conn.CursorLocation = adUseServer
Conn.Open
Dim Rs As Recordset
Set Rs = Conn.Execute("select * from 表1") '由于网络原因,此查询耗时2秒
Set Rs = Conn.Execute("select * from 表2")
Set Rs = Conn.Execute("select * from 表3")
Set Rs = Conn.Execute("select * from 表4")
Set Rs = Conn.Execute("select * from 表5")
Set Rs = Conn.Execute("select * from 表6")
Set Rs = Conn.Execute("select * from 表7")
Conn.Close执行以上7条查询操作,耗时10秒以上。有没有什么方法可以优化此速度?
使用存储过程也不行,难道使用宽带远程连接SQL服务器就这么低效吗?其实我想要的是一种客户机通过ADSL连接远程SQL-Server服务器,执行SQL查询的高效方案。也可以不用ADO,而用其它更高效的方法。但我只知道用ADO...望高手指导!
---------------------------------
同时做很多查询?
看到LZ写的Select*,我就想到了,如果把这些东西Select到本地,处理好了再上传的方法。
打开的时候线先非常慢的接数据库,然后速度就是本地的非常快了。
这也许不是最好的办法,但是如果真的是大量数据读写,也许是最好的办法。
我知道在.net中,有一种解决方案,就是SOAP。但我不知道在vb6中如何使用。
比如客户仅仅要高速查询某些数据,比如
Select * from TableName where address='地址1'
Select * from TableName where address='地址2'
.....
就使用
Recordset.Filter="address='地址1'"
Recordset.Filter="address='地址2'"
.....
这样应该比每次打开新的RecordSet速度要快点
不过内存占用......
其实我的问题是,VB中如何实现服务器端控件。
比如,客户端建立服务器端控件的实例,然后调用服务器端控件的方法获得数据,服务器端控件则在服务器上运行,在服务器上连接本地SQL数据库获得数据,然后通过二进制串的形式吧结果反悔给客户端。这样,要比客户端直接连接服务器端的SQL数据库执行查询效率要高。
这个问题在.net很好解决,可在vb6中我实在不知道该怎么做。
由于最近在改一个vb6写的单机版程序,要改成网络的,所以迫切希望得悉vb6中此技术的运用!
----------------------------------------
你要的中间层,DCOM和COM+是可以的,或者webservices都可以
不过你问题中的示例,或许并非使用了中间层就可以解决了,听听上面大家的意见吧
首先由于你的PC部署现状,所以建议你不要频繁的去访问Server端,你可以通过一次访问获取你所有需要的信息,构建数据包一起返回,减少COM+在客户端和中间层的通信耗时;
另外采用Conn.CursorLocation = adUseServer 设置你的考虑清楚,如果没有必要可以采用adUseClient就可以了;
还有由于是跨PC或进程访问,所以你应该尽量考虑去取最小但又是全面的信息,用“*”的Select是不推荐的;
最后,所有的获取数据逻辑应该尽量使用SQL内部,比如可以加一些过滤(Where)而避免到客户端循环来提升效率。
使用COM或COM+访问,他能省去你一些低层通信的问题,特别是多层部署问题,无法提升你的访问效率。
希望能对你有所帮助。
我的问题已经解决了,我自己写了一个基于Wisock的控件。谢谢大家了!http://topic.csdn.net/u/20080818/20/c370d5af-74e4-4eac-a444-4838b43fdaf4.html一起分享·