都是远程SQL数据库,都是用ADO连接的,为了作比较连接数据库和操作数据库的字符串也是一样的,但是VB+SQL的速度始终很慢,让人无法忍受,让操作无法正常进行。
就打开的平均速度来看,VB连接SQL在10秒左右,ASP+SQL在1秒左右,相差竟10倍之多,请问各位朋友可能是什么原因呢?

解决方案 »

  1.   

    那肯定了,两者工作原理是不一样的,VB+SQL是BS结构,SQL服务器只提供数据,并且在执行过程中,V根据数据需要,程序需不停的与SQL联系,相当于本地计算+SQL提供数据;而ASP与SQL则不同,是CS结构,ASP程序的服务器一般为IIS,与SQL服务器应均为远程本地的,也就是IE发一个响应,IIS接受后,进行本地计算,最后把结果反馈给IE端,所以IE端传输的数据量很少,不像VB那样,根据需要,要将所有数据传过来,计算后,再把数据传给SQL。故而如果做VB+SQL,尽量多写存储过程和用户自定义函数,将计算量放到SQL服务器上去,这样的速度就会快得多。
      

  2.   

    两个说反了,VB+SQL 是CS结构,ASP+SQL是BS结构
      

  3.   

    楼上是认为一个是远程数据库,一个是本地数据库造成的,但楼主说两个均为远程数据库,居然有这么大的差别,难以想象,因为大家其实用的引擎是一样的,不该差别那么大。况且测试肯定在同一个客户机上做的,路由的差别也不会那么大。奇怪。所以答案就是楼上说的,ASP和库在一个机器上,VB运行在另外的机器上。
      

  4.   

    回楼上的话:ASP+SQL的经典连接是调用ADO,但这个ADO组件、IIS服务器和SQL服务器同在服务器端,即客户端(WEB端)发出请求到远程服务器的IIS中,IIS执行脚本,调用IIS服务器上的ADO组件,接着调用服务器上的SQL,计算完成后,IIS再将计算结果返回到WEB端,也就是通过网络传输的只有请求和最终的数据,而VB+SQL则不同,本地的ADO组件或ODBC先得调用远程SQL数据库,将需要的数据从网络中传到本地计算机内存中处理,两者在传输数据上本质的区别。不知以上理解是否有误,请楼上指正!
      

  5.   

    谢谢两位朋友的分析,我在这里需要补充说明几点:
    1.就我现在的测试而言,ASP所需的IIS也是在本机的,远程服务器上只有SQL服务,所以以上两中连接方式的数据传输流程是一样的。
    2.存储过程是连接到数据库以后的操作数据过程,运用以后肯定是会提高操作效率的,但是现在比较突出的问题是两者在 连接数据库 时的时间差别。不知道是C/S与B/S模式架构本身的效率差别导致还是其他的什么原因,有过实际操作经验的朋友也可以来发表一下看法。
      

  6.   

    如果楼主所说:
    ASP+SQL  和   VB+SQL 中,除了SQL数据器是单独的一台SERVER,其他的IIS、ADO、VB程序都是一同一台CLIENT,那么出现这种情况是不可理解的。因为C/S、B/S它们的数据引擎都是ADO通过ODBC与SQL的1433 PORT进行数据通信。 实值上是不会有差异的。那唯一合理的解释是:数据通信的时间是相同的,只是两种机制处理时出现了问题,要么ASP+SQL和VB+SQL程序算法不同造成的,要么是VB程序的其它因素造成了延时。
      

  7.   

    将连接字符串改为sqloledb的方式,外网连接速度会比odbc的快很多。
        cnsql = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & buserid & ";Password=" & bpassword & ";Initial Catalog=" & bdataname & ";Data Source=" & bserver & "," & sqlPort请看:
    http://community.csdn.net/Expert/topic/4815/4815210.xml?temp=.7074396
    http://community.csdn.net/Expert/topic/4819/4819291.xml?temp=.6447107
      

  8.   

    ASP 通过IIS连接可能使用了连接池
    而VB是每次都建立连接你把所有机器重新启动 再都连接一次看时间是不是还差别很大
      

  9.   

    因为C/S、B/S它们的数据引擎都是ADO通过ODBC与SQL的1433 PORT进行数据通信。
    这句话不对,ADO通过什么来操作数据库要看你的引擎的,也就是你的连接串里指定的PROVIDER,ODBC,OLEDB都可以。
    不过楼主的问题确实奇怪,你的计算运行时间的代码段里只是一个CONNECTION.open,还是包含了把数据放到表格里面呢?
      

  10.   

    to yechat:
    为了尽可能排除某些原因,两种连接方式我采用的引擎和连接数据库字符串、打开记录字符串都是一样的。to sundy_RAO:
    我的连接字符串Provider本来是用的就是SQLOLEDB。to province:
    我计算运行时间的代码段不仅包括Connection.Open,还包括一个Recordset.Open,两者占用的时间是一半对一半。to DeadWolf:
    都重启之后,效果不是太大。
    可能连接池有一定的道理,但是这么大差别的原因应该不在于此吧。
      

  11.   

    楼主是否先用VB连接,再调用ASP连接呢?
    如果是这样,楼主可以
    先用ASP连接,然后再调用VB试试,
    两个连接字符串一样,第一次连接的时候会建立连接,耗费时间比较多
      

  12.   

    to pcwe2002:
    先后顺序是反复试过的,谁先谁后的测试结果没有多大的差别。to of123:
    对,VB和ASP都使用了游标的,使用游标有什么很大的影响吗?
      

  13.   

    of123 说的是 客户端游标 
    rs.CursorLocation = adUseClient
      

  14.   

    查询如果提交纪录集的话,在相同条件下
    基于浏览器的(也就是B/S)传递纪录集的速度应该
    比C/S的快,其实大多是查询消耗的时间远远小于
    纪录集在网络上有服务器送到客户端的时间
    所以楼主可以做两个测试:
    1、提交一个足够大的纪录集,比如10万条纪录
    2、只返回一个输出参数
    看看两次测试的时间差距
      

  15.   

    纪录集的传递速度跟ADO好像没什么关系