• SQL Server调用OLE对象


    T-SQL 中是可以调用 OLE 的,将这一功能应用到触发器、存储过程等对象中,SQL Server 运用变得更贴近我们的功能,更加满足我们的需要。

    T-SQL 中有七个存储过程是围绕本节内容进行的,我们只介绍其中最常用的四个存储过程,其余内容您可以参见 SQL Server 联机丛书。

    • sp_OACreate 创建 OLE 对象实例。
    • sp_OAMethod 调用 OLE 对象的方法。
    • sp_OAGetErrorInfo 获取 OLE 自动化错误信息。
    • sp_OADestroy 释放已创建的 OLE 对象。

    1、示例

    我们以ASP中常见的Scripting.FileSystemObject介绍如何利用T-SQL调用DLL。

    首先看一个示例,为了便于您在SQL查询分析器中测试,本示例中添加了两句输出代码(已经在示例中注明),您在应用到触发器或存储过程时,应该去掉这两句,另外在关键语句的后面添加了等效的ASP语句,便于您理解。

    DECLARE @errCode int
     
    DECLARE @fso int
     
    EXEC @errCode = sp_OACreate 'Scripting.FileSystemObject', @fso OUT /*等效于:set fso = Server.CreateObject("Scripting.FileSystemObject")*/
    if @errCode <> 0
    BEGIN
        DECLARE @description varchar(256)
        EXEC sp_OAGetErrorInfo @fso, NULL, @description OUT
        PRINT @description /*SQL 查询分析器中有效*/
    END
     
    DECLARE @exists bit
    EXEC sp_OAMethod @fso, 'FileExists', @exists OUT, 'C:\foo.txt' /*等效于:exists = fso.FileExists("C:\foo.txt")*/
    PRINT @exists /*SQL 查询分析器中有效*/
     
    DECLARE @f int
    EXEC sp_OAMethod @fso, 'CreateTextFile', @f OUT, 'C:\foo.txt', 1 /*等效于:set f = fso.CreateTextFile("C:\foo.txt", true)*/
    EXEC sp_OAMethod @f, 'Write', NULL, '写一行内容' /*等效于:f.Write("写入内容")*/
    EXEC sp_OAMethod @f, 'Close' /*等效于:f.Close*/
    EXEC sp_OADestroy @f /*等效于:set f = nothing*/
     
    EXEC sp_OADestroy @fso /*等效于:set fso = nothing*/
    

    上述中 bit 类型的值 1 表示 true,bit 类型的值 0 表示 false。
    示例将判断 C 盘下是否存在 foo.txt,并且创建一个 foo.txt,并向其中写入一行文字。
    代码似乎有些多,不过您有兴趣一定要仔细看完,因为并不复杂,而且它涵盖了最常用的代码。

    2、讲解

    • sp_OACreate 创建 OLE 对象实例。

      • 第一个参数为 OLE 对象的程序标识符(ProgID)或类标识符(CLSID)。
      • 第二个参数为返回的对象令牌,必须是数据类型为 int 的局部变量,在后面的方法中都要用到对象令牌。输出参数,必须加 OUT 或 OUTPUT。
    • sp_OAMethod 调用 OLE 对象的方法。

      • 第一个参数为对象令牌。
      • 第二个参数为方法名称。
      • 第三个参数为方法的返回值,如果方法返回的是对象,则该参数类型为 int。输出参数,必须加 OUT 或 OUTPUT。
      • 第四个及以后的参数为方法的参数值,如果方法的参数是输出参数,则要加上 OUT 或 OUTPUT。
      • sp_OAMethod也可用来获取属性值。
    • sp_OAGetErrorInfo 获取 OLE 自动化错误信息。

      • 第一个参数为对象令牌。
      • 第二个参数为错误信息的来源。输出参数,必须加 OUT 或 OUTPUT。
      • 第三个参数为错误的描述。输出参数,必须加 OUT 或 OUTPUT。
    • sp_OADestroy 释放已创建的 OLE 对象。

      • 第一个参数为对象令牌。
    • sp_OAGetProperty 获取 OLE 对象的属性值

    • sp_OASetProperty 将 OLE 对象的属性设置为新值

    • sp_OAStop 停止服务器范围内的 OLE 自动化存储过程执行环境。

    这七个存储过程都有返回值,如果返回值是 0 表示成功,其它值表示失败,示例中只对 sp_OACreate 的返回值作了判断。

    3、扩展

    T-SQL 中还可以利用 sp_addextendedproc 向 SQL Server 注册新扩展存储过程的名称,但是 SQL Server 2005 联机丛书中已经说明将在后续版本中删除该功能,不建议我们继续使用该存储过程,所以这里不介绍 sp_addextendedproc

  • 相关阅读:
    20150324--Mysql索引优化-02
    20150324--Mysql索引优化-01
    20150323--memcache-02
    20150323--memcache-01
    轮播效果/cursor
    事件监听和事件概念
    BOM与DOM操作
    for循环语句/命名函数
    数组/控制语句
    数据类型转换/正则表达式
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/16271205.html
Copyright © 2020-2023  润新知