找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 3610|回复: 0

[数据库知识] SQL Server中调用动态链接库的方法

[复制链接]
发表于 2009-6-7 16:15:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
转载自:http://www.kterp.com/posts/list/1/-1/1813.page?typeid=-1
主要通过OLE自动化的扩展存储过程来实现,使用之前需要先打开系统中的这个设置项,可能存在安全上的隐患,慎用!

-- regasm /tlb:Mydllname.tlb Mydllname.dll /codebase
-- regsvr32 d:\ASIM2.dll
   DECLARE @obj int, @msg int
   DECLARE @intRet int, @ret int
   DECLARE @intRetCode int, @ret_code int
   DECLARE @strErr varchar (255)
   DECLARE @strErr1 varchar (255)
   /* 首先创建Com 实例 */

   EXEC @intRetCode = sp_OACreate 'ASIM.IM', @obj OUT
   IF @intRetCode <> 0
   BEGIN
     /* 创建实例 失败 */
     EXEC sp_OAGetErrorInfo @obj, @strErr OUT, @strErr1 OUT
     PRINT '创建实例失败,失败的原因是:' + @strErr + '   ' + @strErr1
     goto return_lab
   END

   exec @intRetCode = sp_OACreate 'ASIM.Msg', @msg OUT
   IF @intRetCode <> 0
   BEGIN
     /* 创建实例 失败 */
     EXEC sp_OAGetErrorInfo @msg, @strErr OUT, @strErr1 OUT
     PRINT '创建实例失败,失败的原因是:' + @strErr + '   ' + @strErr1
     EXEC sp_OADestroy @obj
     goto return_lab
   END

   EXEC @intRetCode = sp_OASetProperty @msg, N'ContentType', N'Text/Text'
   IF @intRetCode <> 0
   BEGIN
     /* 调用方法出错 */
     EXEC sp_OAGetErrorInfo @msg, @strErr OUT, @strErr1 OUT
     PRINT '调用方法失败,失败的原因是:' + @strErr + '   ' + @strErr1
     goto err_lab
   END

   EXEC @intRetCode = sp_OASetProperty @msg, N'Subject', N'Start'
   IF @intRetCode <> 0
   BEGIN
     /* 调用方法出错 */
     EXEC sp_OAGetErrorInfo @msg, @strErr OUT, @strErr1 OUT
     PRINT '调用方法失败,失败的原因是:' + @strErr + '   ' + @strErr1
     goto err_lab
   END

   EXEC @intRetCode = sp_OASetProperty @msg, 'Body', 'This is a test messenger'
   IF @intRetCode <> 0
   BEGIN
     /* 调用方法出错 */
     EXEC sp_OAGetErrorInfo @msg, @strErr OUT, @strErr1 OUT
     PRINT '调用方法失败,失败的原因是:' + @strErr + '   ' + @strErr1
     goto err_lab
   END

   EXEC @intRetCode = sp_OASetProperty @obj, 'port', 5001
   IF @intRetCode <> 0
   BEGIN
     /* 调用方法出错 */
     EXEC sp_OAGetErrorInfo @obj, @strErr OUT, @strErr1 OUT
     PRINT '调用方法失败,失败的原因是:' + @strErr + ' ' + @strErr1
     goto err_lab
   END

   EXEC @intRetCode = sp_OAMethod @obj, 'init', null, 'xiaodi', 'lxd', 'lxd'
   IF @intRetCode <> 0
   BEGIN
     /* 调用方法出错 */
     EXEC sp_OAGetErrorInfo @obj, @strErr OUT, @strErr1 OUT
     PRINT '调用方法失败,失败的原因是:' + @strErr + '   ' + @strErr1
     print @intRetCode
     goto err_lab
   END

   /*创建成功,开始调用*/
   EXEC @intRetCode = sp_OAMethod @obj, 'SendMsgEx', @ret out, @msg, 'tj'
   IF @intRetCode <> 0
   BEGIN
     /* 调用方法出错 */
     EXEC sp_OAGetErrorInfo @obj, @strErr OUT, @strErr1 OUT
     PRINT '调用方法失败,失败的原因是:' + @strErr + '   ' + @strErr1
     goto err_lab
   END

   PRINT '返回的结果是' + Str(@intRet)


err_lab:
   EXEC sp_OADestroy @obj
   EXEC sp_OADestroy @msg

return_lab:

RETURN
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-11-25 13:20 , Processed in 0.045845 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表