在SQL中调用动态链接库中的函数

 在SQL中调用动态链接库中的函数  
  代码示例:  
  ALTER   PROCEDURE   dbo.StoredProcedure2  
  /*  
  (  
  @parameter1   datatype   =   default   value,  
  @parameter2   datatype   OUTPUT  
  )  
  */  
  AS  
  /*   SET   NOCOUNT   ON   */  
  declare   @ErrorCode   int                     --//错误码  
  declare   @object         int                       --//令牌  
  declare   @Source     varchar   (255)         --   //返回错误信息  
  declare   @Dest         varchar   (255)  
  declare   @dk_str   varchar(255)                       --传入的参数  
  select   @ErrorCode   =@@Error  
  if   @ErrorCode   =   0  
        exec   @ErrorCode   =   sp_OACreate   'DK_DLL.Hourse'/*dll名称和类名称*/,@Object   Output  
  if   @ErrorCode   =0  
  select   @dk_str   ='d://test.txt'                     --为参数赋值  
  exec   @ErrorCode=sp_OAMethod   @Object   ,'OutFile'/*方法名称*/   ,NULL,@dk_str/*@ourValue   Output*/  
                                                                                                            --(这里一定要有@符号,文档有错误)  
    if   @ErrorCode<>0  
        exec   sp_OAGetErrorInfo   @Object   ,@Source   output,@Dest   output  
        set   @Dest   ='Error   ('+Convert   (varchar   ,@ErrorCode)  
                                                +','+@Source   +   '):'+@Dest  
                                                Raiserror   (@Dest,16,1)  
  exec   sp_OADestroy   @Object  
  /*sp_OAMethod   的用法:   ObjPointer   int   IN,   MethodName   varchar   IN   [,   @returnval   <any>   OUT   [,   additional   IN,   OUT,   or   BOTH   params]]  
     
  */  
  RETURN    

DECLARE @Object int; DECLARE @HR int; DECLARE @Property nvarchar(255); DECLARE @Return nvarchar(255); DECLARE @Source nvarchar(255), @Desc nvarchar(255); DECLARE @httpStatus int; DECLARE @response varchar(8000); --创建 OLE 对象的实例 EXEC @HR = sp_OACreate N'MSXML2.XMLHTTP.6.0',@Object OUT; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('Error Creating COM Component 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO END_ROUTINE END BEGIN --Open EXEC @HR = sp_OAMethod @Object,N'open',Null,'GET','http://localhost:1728/HttpServer/submit.aspx',FALSE; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('Open 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --setRequestHeader EXEC @HR = sp_OAMethod @Object,N'setRequestHeader',Null,'Content-Type','text/xml'; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('setRequestHeader 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --send EXEC @HR = sp_OAMethod @Object,N'send',Null,''; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('send 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --readyState EXEC @HR = sp_OAGetProperty @Object,'readyState', @httpStatus OUT; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('readyState 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --verify status IF @httpStatus 4 BEGIN RAISERROR('readyState http status bad', 16,1) GOTO CLEANUP END --status EXEC @HR = sp_OAGetProperty @Object,'status', @httpStatus OUT; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('getstatus 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END --verify status IF @httpStatus 200 BEGIN Print Cast(@httpStatus As varchar) RAISERROR('Open http status bad', 16,1) GOTO CLEANUP END --responseText EXEC @HR = sp_OAGetProperty @Object, 'responseText', @response OUT IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; RAISERROR('responseText 0x%x, %s, %s',16,1, @HR, @Source, @Desc) GOTO CLEANUP END Print @response END CLEANUP: BEGIN EXEC @HR = sp_OADestroy @Object; IF @HR 0 BEGIN EXEC sp_OAGetErrorInfo @Object,@Source OUT,@Desc OUT; SELECT HR = convert(varbinary(4),@HR),Source=@Source,Description=@Desc; END END END_ROUTINE: RETURN; GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值