CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

哪种方法连接服务器端 sql server7.0 速度快??

楼主yuanxy(梦想鸭)2001-11-01 22:30:22 在 MS-SQL Server / 基础类 提问

数据库在本机速度很快,可放在服务器端就慢了!  
   
  服务器和客户机是用10M     HUB连的是不是HUB速度太慢了,还是我程序代码有问题?  
   
  唉,真难处理。怎么样才能使访问数据库的速度变快呢?  
   
  对了我现在是用DSN连接的,DSN连接速度快吗?如果不快,哪种方式快!!!!! 问题点数:100、回复次数:17Top

1 楼vicsue(victor)回复于 2001-11-01 22:37:29 得分 0

我也有同样的问题,   关注!Top

2 楼yuanxy(梦想鸭)回复于 2001-11-02 06:52:57 得分 0

topTop

3 楼yuanxy(梦想鸭)回复于 2001-11-02 07:36:59 得分 0

这里人怎么了,你们的热情哪里去了,不去不要劲top一下不行吗?Top

4 楼rachel_liwei(牙牙)回复于 2001-11-02 08:05:25 得分 10

我现在用的是本机的数据库用ado2.5方式oledb引导连接,速度也不快,我也很关注这个问题。有结果欢迎email沟通联系,addr:wwlee@263.net.Top

5 楼palmkey(原水)回复于 2001-11-02 08:38:56 得分 10

rdo,ado,dao中,使用rdo速度较快,但它还没有直接使用ODBC   API快,别的,使用sql   server   自带的db   library也能获得较好的性能。Top

6 楼yuanxy(梦想鸭)回复于 2001-11-02 10:04:57 得分 0

topTop

7 楼yuanxy(梦想鸭)回复于 2001-11-02 10:12:08 得分 0

谁有存储过程的资料啊听说这个技术可以加速Top

8 楼baoxiang(包香)回复于 2001-11-02 10:16:08 得分 50

存储过程并不是对所有的都能加速。  
  在有些情况下procedure的速度不一定快。Top

9 楼zcflion(吃大白菜的鸟--菜鸟)回复于 2001-11-02 10:16:49 得分 0

最快是用OLE   DB啦  
  关于存储过程只是优化查询的速度,但并不能加快链接的速度Top

10 楼baoxiang(包香)回复于 2001-11-02 10:17:52 得分 0

  ADO   Stored   Procedure的呼叫  
   
  来源:cww  
   
  Informix的Stored   Procedure之呼叫  
   
  假设有两个Stored   Procedure如下:  
  CREATE   PROCEDURE   GETQPPFA   (PCASENO   CHAR(8),PSEQ   INTEGER)  
        RETURNING   CHAR(1),   CHAR(9),   CHAR(12),   DECIMAL(9,2);  
  DEFINE   psys_kind   CHAR(1);  
  DEFINE   pnckm_code   CHAR(9);  
  DEFINE   phel_code   CHAR(12);  
  DEFINE   PUNIT_PRICE   DECIMAL(9,2);  
  --CASE_NO   +   SEQ   是UNIQUE的KEY值  
  SELECT   sys_kind,   nckm_code,   hel_code,   unit_price  
                into   psys_kind,   pnckm_code,   phel_code,   punit_price  
                from   qppfa  
                Where   case_no   =   PCASENO   and   seq   =   PSEQ;  
  RETURN   psys_kind,   pnckm_code,   phel_code,   punit_price;  
  END   PROCEDURE;  
   
   
  CREATE   PROCEDURE   GETQPPFA2   (PCASENO   CHAR(8))  
        RETURNING   CHAR(1),   CHAR(9),   CHAR(12),   DECIMAL(9,2);  
  DEFINE   psys_kind   CHAR(1);  
  DEFINE   pnckm_code   CHAR(9);  
  DEFINE   phel_code   CHAR(12);  
  DEFINE   PUNIT_PRICE   DECIMAL(9,2);  
   
  FOREACH    
      SELECT   sys_kind,   nckm_code,   hel_code,   unit_price  
                into   psys_kind,   pnckm_code,   phel_code,   punit_price  
                from   qppfa  
                Where   case_no   =   PCASENO    
      RETURN   psys_kind,   pnckm_code,   phel_code,   punit_price   WITH   RESUME;  
  END   FOREACH;  
  END   PROCEDURE;  
    如果是传回值的Stored   Procedure,那使用方式如下:  
   
  Private   cn       As   ADODB.Connection  
  Private   rs   As   ADODB.Recordset  
  Private   cmd3   As   ADODB.Command  
   
   
  Dim   connstr   As   String  
  Dim   ans   As   Integer,   errstr   As   String,   sql   As   String  
  Dim   param   As   ADODB.Parameter  
   
  Set   cn   =   New   ADODB.Connection  
   
  connstr   =   "UID=cww;PWD=jjh5612;Database=cwwpf@eis;"   _  
                  +   "Driver={OpenLink   Generic   32   Bit   Driver};"   _  
                  +   "Host=192.168.0.61;"   _  
                  +   ";FetchBufferSize=30"   _  
                  +   ";NoLoginBox=Yes"   _  
                  +   ";Options="   _  
                  +   ";Protocol=TCP/IP"   _  
                  +   ";ReadOnly=No"   _  
                  +   ";ServerOptions="   _  
                  +   ";ServerType=Informix   7.2"  
  cn.ConnectionString   =   connstr  
  cn.Open  
  Set   cmd3   =   New   ADODB.Command  
  cmd3.CommandText   =   "Execute   procedure   getqppfa   (?,   ?)"  
  cmd3.CommandType   =   adCmdText  
  cmd3.Name   =   "GetQppfa"  
  '设定传入的叁数  
  Set   param   =   cmd3.CreateParameter("CaseNo",   adBSTR,   adParamInput)  
  cmd3.Parameters.Append   param  
   
  Set   param   =   cmd3.CreateParameter("seq",   adInteger,   adParamInput)  
  cmd3.Parameters.Append   param  
   
  cmd3.Parameters("CaseNo").Value   =   "E8701761"  
  cmd3.Parameters("seq").Value   =   5  
   
  Set   cmd3.ActiveConnection   =   cn  
  Dim   ss   As   Long,   i   As   Long  
  Set   rs   =   cmd3.Execute   '要以这种方式来开启,传回Recordset物件,只有一笔资料  
   
  rs.MoveFirst  
  rs.Close  
  cn.Close  
    相对的如果是传回一个Resultset,主要有两种作法,第一种是使用Command物件的Execute  
  来产生Recordset物件,但是使用这种方式最大的缺点在於我们无法设定它的CursorTye,  
  似乎会以Scroll   Cursor的方式产生(而非Forwardonly),所以要设为Client端的Cursor  
  才不会有问题(OpenLink   ODBC   Driver   for   Informix   在Server端的Cursor只能用ForwardOnly)  
  Private   cn       As   ADODB.Connection  
  Private   rs       As   ADODB.Recordset  
  Private   cmd3   As   ADODB.Command  
   
   
  Dim   connstr   As   String  
  Dim   ans   As   Integer,   errstr   As   String,   sql   As   String  
  Dim   param   As   ADODB.Parameter  
   
  Set   cn   =   New   ADODB.Connection  
  connstr   =   "UID=cww;PWD=jjh5612;Database=cwwpf@eis;"   _  
                  +   "Driver={OpenLink   Generic   32   Bit   Driver};"   _  
                  +   "Host=192.168.0.61;"   _  
                  +   ";FetchBufferSize=30"   _  
                  +   ";NoLoginBox=Yes"   _  
                  +   ";Options="   _  
                  +   ";Protocol=TCP/IP"   _  
                  +   ";ReadOnly=No"   _  
                  +   ";ServerOptions="   _  
                  +   ";ServerType=Informix   7.2"  
  cn.ConnectionString   =   connstr  
  cn.CursorLocation   =   adUseClient   '设为Client端的Cursor  
  cn.Open  
   
  Set   cmd3   =   New   ADODB.Command  
  cmd3.CommandText   =   "Execute   procedure   getqppfa2   (?)"  
  cmd3.CommandType   =   adCmdText  
  cmd3.Name   =   "GetQppfa2"  
   
  Set   param   =   cmd3.CreateParameter("CaseNo",   adBSTR,   adParamInput)  
  cmd3.Parameters.Append   param  
   
  cmd3.Parameters("CaseNo").Value   =   "E8701761"  
   
  Set   cmd3.ActiveConnection   =   cn  
  Set   rs   =   cmd3.Execute  
  rs.MoveFirst  
  rs.Close  
  cn.Close  
  Set   cn   =   Nothing  
    另外一种可以设定CursorType的方式就不能使用叁数查询了,方式如下:  
   
  Set   cn   =   New   ADODB.Connection  
   
  connstr   =   "UID=cww;PWD=jjh5612;Database=cwwpf@eis;"   _  
                  +   "Driver={OpenLink   Generic   32   Bit   Driver};"   _  
                  +   "Host=192.168.0.61;"   _  
                  +   ";FetchBufferSize=30"   _  
                  +   ";NoLoginBox=Yes"   _  
                  +   ";Options="   _  
                  +   ";Protocol=TCP/IP"   _  
                  +   ";ReadOnly=No"   _  
                  +   ";ServerOptions="   _  
                  +   ";ServerType=Informix   7.2"  
  cn.ConnectionString   =   connstr  
  cn.CursorLocation   =   adUseServer  
  cn.Open  
  Set   rs   =   New   ADODB.Recordset  
  Set   rs.ActiveConnection   =   cn  
  rs.CursorType   =   adOpenForwardOnly  
  rs.LockType   =   adLockReadOnly   'Stored   Procedure的Recordset不能修改  
  rs.Open   "Execute   procedure   getqppfa2   ('E8701761')"  
   
  rs.MoveNext  
  rs.Close  
  cn.Close  
  Set   cn   =   Nothing  
    SQL   Server6.5呢,它使用Stored   Procedure的方式也有一些问题,就是使用OLEDB   的方  
  式时,没有办法成功,要使用ODBC   Provider的方式,另外   CommandType也要设定成  
  AdCmdText   才没有问题,不能设成AdCmdStoredProc,很奇怪。  
  而SQL7.0呢,是可以用oledb的方式,但是CommandType也要设定成AdCmdText   才没有问题  
  ,不能设成AdCmdStoredProc。而BStr的叁数也要设定其长度,不然传不回资料  
  假设有个Stored   Procedure如下  
  CREATE   PROCEDURE   getqppfa  
          @pcaseno   CHAR(8),     @pseq         INT,  
          @OUTVAL   INT   OUTPUT            
    AS  
          SELECT   @OUTVAL   =   (Select   Count(*)   from   qppfa   where   case_no   =   @pcaseno)  
          IF   @OUTVAL   >   0  
                RETURN   1  
          ELSE  
                RETURN   0  
  GO  
   
   
  CREATE   PROCEDURE   getqppfa2  
          @pcaseno   CHAR(8)  
    AS  
          SELECT   sys_kind,   nckm_code,   hel_code   unit_price  
                    FROM   QPPFA  
                    WHERE   case_no   =   @pcaseno    
  GO  
    相对应的STORED   PROCEDURE呼叫如下:(传回值的呼叫方式)  
   
  传回值的呼叫方式  
  Private   cn       As   ADODB.Connection  
  Private   rs       As   ADODB.Recordset  
  Private   cmd3   As   ADODB.Command  
   
  Dim   connstr   As   String  
  Dim   ans   As   Integer,   errstr   As   String,   sql   As   String  
  Dim   param   As   ADODB.Parameter  
   
  Set   cn   =   New   ADODB.Connection  
  'Sql   6.5要用以下两行  
  'connstr   =   "Driver={SQL   Server};UID=cww;PWD=jjh5612;Server=OPEN_VIEW;Database=cwwtest"  
  'cn.ConnectionString   =   connstr  
   
  'Sql   7.0用以下两行  
  connstr   =   "Data   Source=ACCOUNT;UID=sa;PWD=;Initial   Catalog=NKIUAcc"  
  cn.Provider   =   "SQLOLEDB"  
   
  cn.Open  
   
  Set   cmd3   =   New   ADODB.Command  
   
  cmd3.CommandText   =   "{   ?   =   call   GETQPPFA   (?,   ?,   ?)   }"  
  cmd3.CommandType   =   adCmdText    
  cmd3.Name   =   "GetQppfa"  
  '设定Return的叁数  
  Set   param   =   cmd3.CreateParameter("RetValue",   adInteger,   adParamReturnValue)  
  cmd3.Parameters.Append   param  
  '设定Input的叁数  
  'Set   param   =   cmd3.CreateParameter("CaseNo",   adBSTR,   adParamInput)  
  'SQL7.0连字串叁数长度亦要设  
  Set   param   =   cmd3.CreateParameter("CaseNo",   adBSTR,   adParamInput,   8)  
  cmd3.Parameters.Append   param  
  '设定Input的叁数  
  Set   param   =   cmd3.CreateParameter("seq",   adInteger,   adParamInput)  
  cmd3.Parameters.Append   param  
  '设定OutPut的叁数  
  Set   param   =   cmd3.CreateParameter("RecCount",   adInteger,   adParamOutput)  
  cmd3.Parameters.Append   param  
   
  cmd3.Parameters("CaseNo").Value   =   "E8701761"  
  cmd3.Parameters("seq").Value   =   5  
  Set   cmd3.ActiveConnection   =   cn  
   
  cmd3.Execute  
  Debug.Print   cmd3.Parameters(0),   cmd3.Parameters(3)  
   
   
  '也可以使用这种方式呼叫,结果和上面相同  
  Dim   ss   As   Long,   i   As   Long  
  i   =   cn.GetQppfa("E8701761",   5,   ss)  
  Debug.Print   i,   ss  
   
   
    SQL   Server传回Resultset的作法  
   
  Private   cn       As   ADODB.Connection  
  Private   rs       As   ADODB.Recordset  
  Private   cmd3   As   ADODB.Command  
   
  Dim   connstr   As   String  
  Dim   ans   As   Integer,   errstr   As   String,   sql   As   String  
  Dim   param   As   ADODB.Parameter  
   
  'Sql   6.5要用以下两行  
  'connstr   =   "Driver={SQL   Server};UID=cww;PWD=jjh5612;Server=OPEN_VIEW;Database=cwwtest"  
  'cn.ConnectionString   =   connstr  
   
  'Sql   7.0用以下两行  
  connstr   =   "Data   Source=ACCOUNT;UID=sa;PWD=;Initial   Catalog=NKIUAcc"  
  cn.Provider   =   "SQLOLEDB"  
  cn.ConnectionString   =   connstr  
  cn.Open  
   
  Set   cmd3   =   New   ADODB.Command  
  cmd3.CommandText   =   "{   call     GETQPPFA2   (?)     }"  
  cmd3.CommandType   =   adCmdText  
  cmd3.Name   =   "GetQppfa2"  
   
  'Set   param   =   cmd3.CreateParameter("CaseNo",   adBSTR,   adParamInput)  
  'SQL7.0连字串叁数长度亦要设  
  Set   param   =   cmd3.CreateParameter("CaseNo",   adBSTR,   adParamInput,   8)  
  cmd3.Parameters.Append   param  
   
  cmd3.Parameters("CaseNo").Value   =   "E8701761"  
   
  Set   cmd3.ActiveConnection   =   cn  
  Set   rs   =   cmd3.Execute  
  rs.MoveFirst  
    .  
    .    
  rs.Close  
  cn.Close  
     
  这是我在别的地方看到的。先转贴到这里。  
  大家看看吧。  
  这是Procedure的一种用法。  
  Top

11 楼yuanxy(梦想鸭)回复于 2001-11-02 10:18:41 得分 0

那在单机下运行很快啊,到局域网怎么就慢了呢?  
   
  to   zcflion  
   
  ole   db怎么用Top

12 楼yuanxy(梦想鸭)回复于 2001-11-02 16:35:28 得分 0

好长Top

13 楼huxianwei(飞狐)回复于 2001-11-02 16:41:26 得分 10

有几个原因:  
  一、网络速度,可以此时一下,例如靠一个大文件;  
  二、不同的操作系统,例如在win98和winnt之间的网络通讯会很慢.Top

14 楼yuanxy(梦想鸭)回复于 2001-11-02 16:54:28 得分 0

楼上的我就是用win98和winnt通讯的。有什么办法解决吗?Top

15 楼Ganzl(甘逐浪)回复于 2001-11-02 21:43:45 得分 20

我想不会是数据访问方法造成的性能问题,是客户端与服务器的网络通讯问题,将服务器和工作站只使用TCP/IP通讯协议Top

16 楼fangoxyz(小虫)回复于 2001-11-02 21:58:55 得分 0

数据库是使用什么?Top

17 楼yuanxy(梦想鸭)回复于 2001-11-02 22:03:58 得分 0

sql   server   7.0Top

相关问题

  • 哪种方法速度快?
  • bcb使用ADO连接后台SQL SERVER速度快么?
  • 简单SQL,要求速度快
  • 对数据库操作哪种方法速度快?
  • 一个小问题,高分奉上,有什么办法使Delphi与SQL Server数据库的连接速度快一点
  • 大家看看,这个sql语句速度快不快?
  • 想知道哪种方式客户浏览速度快?写程序方便?(模板,脚本)
  • "日期时间"变成"日期"哪种方法最快。[SQL SERVER]
  • 用VB联SQL SERVER数据库,哪种方法最好?急问!
  • 请教Sql Server中的Numeric属于哪种FieldType

关键词

  • tcp/ip
  • win98
  • 服务器
  • 连接
  • 数据库
  • code
  • ado
  • pcaseno
  • getqppfa
  • pnckm

得分解答快速导航

  • 帖主:yuanxy
  • rachel_liwei
  • palmkey
  • baoxiang
  • huxianwei
  • Ganzl

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo