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

C#编写扩展存储过程
-- 销毁对象实例。 
C#编写扩展存储过程
EXEC @hr = sp_OADestroy @object 
C#编写扩展存储过程
IF @hr <> 0 
C#编写扩展存储过程
BEGIN 
C#编写扩展存储过程
EXEC sp_OAGetErrorInfo @object@src OUT, @desc OUT 
C#编写扩展存储过程
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc 
C#编写扩展存储过程
RETURN 
C#编写扩展存储过程
END
C#编写扩展存储过程
GO
C#编写扩展存储过程
扩展存储过程的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
相关资源
相似解决方案