Rolinson's Blog

ASP.NET , J2ME , WAP
(还有收藏网络上的技术文章,以便一急之用)

博客园 首页 新随笔 联系 订阅 管理

虽然MS SQl存储过程自带有加密的方法,但现在外面有很可软件可以解掉。
解决的方法是写DLL或OLE程序,然后在数据库中调用就行了,SQL的很多扩展存储过程就是用DLL


--SQL Server的存储过程调用Com组件


/*--下面的部分在VB中完成

首先我们先用VB 作一个最简单的组件

工程名称: testSQLCOM
类名: TestMath

'函数,计算两个整数相加的结果
Public Function AddMe(a As Long, b As Long) As Long
   AddMe = a + b
End Function

编译生成后,我们就可以在 Sql Server 中对这个 Com 组件进行调用了
--*/

/*--下面是SQL中对上面DLL的调用--*/

--定义用到的变量
declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@re int

--创建调用实例
exec @err=sp_OACreate 'testSQLCOM.TestMath', @obj out
if @err<>0 goto lberr  --如果创建失败,则进行错误处理

--调用DLL中的函数
exec @err=sp_OAMethod @obj,'AddMe',@re out,100,200
if @err<>0 goto lberr  --如果调用错误,则进行错误处理

print '返回的结果是:' + str(@re)

--完成后释放
exec sp_OADestroy @obj

return

lberr:
 exec sp_oageterrorinfo 0,@src out,@desc out
 select cast(@err as varbinary(4)) as 错误号
  ,@src as 错误源,@desc as 错误描述



下面这个是开发项目时朋友写的,以做参考:)
CREATE FUNCTION SMSFormatMsg (@s1 nvarchar(1000), @s2 nvarchar(1000)) 
RETURNS nvarchar(1000)
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 'SQLOLEProc.CbkSms', @object OUT
 IF @hr <> 0
 BEGIN
  SELECT @return = 'error'
 END
 
 -- 调用对象方法。
 EXEC @hr = sp_OAMethod @object, 'FormatMsg', @return OUT , @s1, @s2
 IF @hr <> 0
 BEGIN
  SELECT @return = 'error'
 END
 
 -- 销毁对象实例。
 EXEC @hr = sp_OADestroy @object
 IF @hr <> 0
 BEGIN
  SELECT @return = 'error'
 END
 RETURN(@return)
END




posted on 2005-02-26 14:16  ByNow  阅读(1782)  评论(0编辑  收藏  举报