频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

用COM自动服务扩展SQL Server功能

来源:yesky 作者:刘彦清编译 出处:巧巧读书 2005-11-28 进入讨论组
上一页 1 2 3 

  在实际工作中使用COM自动操作

  至此,我们已经学习了如何使用每一个COM自动操作存储过程,我们现在来讨论一下一个综合应用它们的例子。程序清单1是一个名字为sp_OpenWordIfCoProcAvailable的过程,在这个过程中,我们用sp_OACreate创建了一个Microsoft Word的实例,然后使用sp_OAGetProperty来获取Word的MathCoProcessorAvailable属性,如果sp_OAGetProperty返回1,则sp_OpenWordIfCoProcAvailable向调用过程返回Word对象的对象标记;否则,sp_OpenWordIfCoProcAvailable关闭Word,并返回0。为了节省版面,我们只调用了出错处理过程一次,在实际应用中,应该在每次调用自动操作存储过程后都调用出错处理过程。注意,为对Word进行自动操作,应该在安装SQL Server的机器上安装Word。

  程序清单 1:自动操作Word的方法的例子

Create Procedure sp_OpenWordIfCoProcAvailable As

  Declare @Object int, @hr int, @RetVal int

    Exec @hr = sp_OACreate 'Word.Application', @Object OUTPUT

  If @hr <> 0

   BEGIN

    Exec sp_DisplayOAErrorInfo @Object, @hr

    Return 0

  END

  Exec @hr = sp_OAGetProperty @Object, 'MathCoProcessorAvailable', @RetVal

  If @hr=0

   BEGIN

    Exec @hr = sp_OAMethod @Object, 'Quit', 0

    Exec @hr = sp_OADestroy @Object

    Return 0

  END

  Exec @hr = sp_OAMethod @Object, 'Activate'

  Return @Object

  如果需要对一个使用Visual Basic编写的COM对象进行自动操作,调试它与SQL Server之间的互操作性是一件相当容易的事。我们需要在运行SQL Server的机器上安装有Visual Basic,在Visual Basic的编辑器中加载COM项目,设置一些断点,然后编译并运行该COM对象。在有存储过程对该对象进行自动操作时,在运行到一个断点时,编辑器就会自动切换到调试模式,我们就可以象调试其他的Visual Basic程序那样调试这个COM对象。如果要对调试过程实施更多的控制,可以使用T-SQL Debugger for VB插件,它能采用步进方式执行存储过程的代码。

  此外,在SQL Server中应用COM自动操作我们还能作什么呢?下面是我曾使用SQL Server强大的COM自动操作功能的实际例子。前不久,我需要从一个SQL Server存储过程中使用一个通过命名管道进行通讯,而SQL Server中没有提供通过编程方式打开和使用命名管道的机制,我正好有一个可以使用命名管道通讯的VB例和库,因此就把这个库文件作成一个类,并创建了一个ActiveX DLL文件,然后从存储过程中对DLL进行自动操作。就这样,我就可以在SQL Server中使用命名管道通讯了。

  另一次,我需要复制一些文件和数据库表。使用SQL Server的复制功能可以很方便地复制这些数据,但复制文件则要难得多,NT的目录同步功能很弱,不能满足要求。尽管我还可以把拷贝命令存到字符变量中,然后把变量传递给xp_cmdshell,但会遇到命令行长度的限制。更不方便的是,如果在拷贝过程中发生了错误,我不能很方便地判断错误发生在什么地方,因此,我就编写了一个ActiveX DLL,并通过自动操作它来处理文件的拷贝工作。

  还有一次,我需要在SQL Server 6.5和Index Server 2.0之间先执行连结后再完成查询任务,如果使用带ADO的Windows 2000 Indexing Services和SQL Server 7.0,完成这样的工作非常简单,但如果不是使用这些产品,则要困难得多。首先,需要编写一个可以执行Index Server查询对象ixsso.dll的ActiveX DLL,对它进行自动操作,从Index Server目录中获得信息,并通过一个方法将信息返回到存储过程中。然后把这些数据保存到一个临时表中,再对它进行联结操作。COM自动操作再一次帮我解决了问题。

  在存储过程中执行COM自动操作几乎可以使我们完成任何想完成的操作。SQL Server 2000中的COM自动操作没有什么变化,因此采用这种方法编写的代码在将来仍然可以使用下去。


文章地址: http://www.qqread.com/sqlserver/d032102005.html 更多文章 更多内容请看SQL Server 数据处理专题SQL Server 索引和查询专题SQL Server专题,或进入讨论组讨论。
上一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章