Microsoft® SQL Server™ 2000支持扩展存储过程,使你可以用其他语言编写组件扩展数据库的功能。以前本地代码VC等可以在做好动态链接库后直接放到System32目录下,然后通过在master库中创建存储过程调用sp_addextendedproc来实现功能。
.NET等托管语言编写的DLL要多做几步工作。首先托管类库要注册COM接口,而要注册COM接口就需要添加一个Interface,声明出要暴露方法,并添加GUID和DispId,例如:
[Guid("200D1D86-E232-4b52-84F1-6D7FED6EA99F")]
public interface COM_Interface
}
然后编译并利用Regasm注册(或在VS2005项目属性中直接勾选)。
然后是编写存储过程了,这里我们可以通过sp_OACreate、sp_OADestroy创建和销毁对象,通过sp_OAMethod、sp_OAGetErrorInfo调用对象和捕捉错误,下面是我以前的发送邮件的一段代码:
CREATE PROCEDURE dbo.SendMail
@to varchar(50),
@subject varchar(255),
@body varchar(500)
AS
DECLARE @object int
DECLARE @hr int
DECLARE @return varchar(255)
DECLARE @src varchar(255), @desc varchar(255)

-- 创建对象实例。
EXEC @hr = sp_OACreate 'ExtendProcC.SendMails', @object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description='111'
RETURN
END
-- 调用对象方法。
EXEC @hr = sp_OAMethod @object, 'Send',@return OUT,'smtp.163.com','123@163.com','123','123@163.com','某某',@to,'1',@SUBJECT,@body
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
--PRINT @return

-- 销毁对象实例。
EXEC @hr = sp_OADestroy @object
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
GO
扩展存储过程的DLL将会作为COM对象运行于SQLServer的地址空间,所以在实现类中最好只有方法,慎用全局字段。
相关文章:
-
2021-11-17
-
2022-12-23
-
2021-10-22
-
2022-02-07
-
2022-12-23
-
2021-07-07
-
2021-08-14
猜你喜欢
-
2022-02-25
-
2021-07-25
-
2022-12-23
-
2021-10-21
-
2021-06-17
-
2021-11-19
相关资源
-
下载
2023-03-03
-
下载
2023-01-09
-
下载
2023-01-22