日期:2014-05-18  浏览次数:20468 次

用Sql Server2000调用Com组件的自定义函数速度问题
我想对SQL   SERVER2000数据进行加密,可是SQL   SERVER2000只能加密存储过程等,而且网上就有破解之法,使用SQL   SERVER2005可以实现数据加密,可是让用户装一大堆东西很是麻烦。因此想用程序自己写的加、解密,通过SQL   SERVER2000调用com对象,实现。
SET   QUOTED_IDENTIFIER   OFF  
GO
SET   ANSI_NULLS   ON  
GO

CREATE   FUNCTION   [dbo].[FUNReturnMsg]   (@c_id   varchar(10),   @c_name   varchar(20),   @c_sex   varchar(10))    
RETURNS   nvarchar(255)  
AS    
BEGIN  
  DECLARE   @object   int  
  DECLARE   @hr   int  
  DECLARE   @property   varchar(255)  
  DECLARE   @return   varchar(255)  
  DECLARE   @src   varchar(255),   @desc   varchar(255)  
   
  --   创建对象实例。  
  EXEC   @hr   =   sp_OACreate   'TTFS.TTFSObject ',   @object   OUT  
  IF   @hr   <>   0  
  BEGIN  
    SELECT   @return   =@c_name
  END  
   
  --   调用对象方法。  
  EXEC   @hr   =   sp_OAMethod   @object,   'ReturnContent ',   @return   OUT   ,@c_id,@c_name,@c_sex  
  IF   @hr   <>   0  
  BEGIN  
    SELECT   @return   =   @c_name
  END  
   
  --   销毁对象实例。  
  EXEC   @hr   =   sp_OADestroy   @object  
  IF   @hr   <>   0  
  BEGIN  
    SELECT   @return   =   @c_name
  END  
  RETURN(@return)  
END


GO
SET   QUOTED_IDENTIFIER   OFF  
GO
SET   ANSI_NULLS   ON  
GO
可是发现实际使用起来,速度简直象牛需要8分钟,以下是调用:
SELECT     dbo.FUNReturnMsg( '0 ',   fieldname00,   '你个老母 ')   AS   内容   FROM   table1
如果直接select   fieldname00   FROM   table1  
速度不到0.5秒。
我修改程序为不进行任何操作,直接返回fieldname00,速度仍是8分钟。
所以瓶颈在SQL   SERVER   select时每条记录都要3步:创建   调用   释放。

帮帮我,看怎么解决这个问题或告诉我加密的更好方法。

------解决方案--------------------
简单的加解密,异或
------解决方案--------------------
在前台处理加密解密。

前台加密后直接追加或更新到后台。

从后台获取到本地后再解密。
------解决方案--------------------
在where 后面的串,也在前台加密后传到后台。

------解决方案--------------------
wangtiecheng(不知不为过,不学就是错!) (

前台处理好,.net很快的