设为首页
加入收藏
帮助中心
首页 | 红盾通告 | 信息中心 | ASP技术 | 数据库 | 网页设计 | 网管专栏 | OICQ攻略 | 墨客频道 | 网站运营 |
当前位置:首页 >> 数据库 >> SQL Server >> 正文
最新信息
·SQL2000做附加数据库时报:…
·数据库sql被挂马终极批量删…
·动网论坛全文索引建立帮助
·论坛不支持文章内容搜索的…
·打造抵御SQL注入攻击的MSS…
·10个保护SQL Server 2000安…
·sql server安全设置攻略
·SQL Server安全设置清单列…
·使用 SQL Server 时需要经…
·SQL中触发器实例讲解
资料搜索
热点信息
·如何压缩SQL Server 2000数…
·SQL中触发器实例讲解
·日志文件满而造成SQL数据库…
·10个保护SQL Server 2000安…
·使用 SQL Server 时需要经…
·SQL2000做附加数据库时报:…
·SQL SERVER的安全隐患:触…
·asp如何连接sql server并实…
·SQL Server不能启动的常见…
·一种简单的表中删除重复行…
推荐信息
·打造抵御SQL注入攻击的MSS…
·SQL Server数据库开发的二…
·Sqlserver 优化的方法
·SQLServer吞噬的内存解决办…
·SQL SERVER日志清除的两种…
·如何压缩SQL Server 2000数…
·SQL Server 2000 SP4发布
·动网论坛全文索引建立帮助
·10个保护SQL Server 2000安…
·SQL Server安全设置清单列…


Google
 
关于在SQL-SERVER里调用COM组件
〖编辑:Cloudy | 浏览:人次〗

Sql-server里可以调用基于IDispatch的COM组件

有兴趣的可以自己去查SQL帮助里的sp_OACreate、sp_OAMethod、sp_OADestroy等存储过程的用法。

下面是我在一个短信报警的小项目里的一些sql代码,报警信息通过各类软件插入到sql-server里,然后通过触发器调用组件,并发送短信到指定手机上去,实现自动报警功能。

//测试数据库的触发器

ALTER TRIGGER message_Trigger1

ON dbo.message

FOR INSERT /*, UPDATE, DELETE */

AS

       /* IF UPDATE (column_name) ...*/

begin

       declare @PhoneNum nvarchar(50)

       declare @Content nvarchar(140)

       declare @MessageId nvarchar(70)

       declare @index int

       declare @hr int

       declare @object int

       select @PhoneNum = phone_num, @Content = Content, @MessageId = message_id from inserted

       select @index = 1

       /*调用COM发送短信*/

       begin

              EXEC @hr = sp_OACreate '{26850DDA-862C-44FF-9232-282937F2CA4B}',@object OUT

              if @hr = 0

              begin

                     exec @hr=sp_OAMethod @object,'SendMsg',NULL,@Content,@PhoneNum,@index,@MessageId

                     exec sp_OADestroy @object

              end

       end

end

这里的代码可以说是没有问题,但是也可以说是有很大的问题。

关键就在于组件的SendMsg方法,为什么呢?我可以举出几个我实际碰到的问题来做具体说明。

最主要有2点

第1:此COM组件是否为进程内组件,组件内部代码是否足够强壮

第2:创建组件和销毁组件及组件方法要尽最大可能的快速

我对上述两点做一个说明

如果COM组件为进程内组件的话,意味着此组件被sql-server加载,如果此代码不够健壮,那么,由于组件本身导致的挂起,崩溃,会直接影响到整个sql-server,那么情况是非常严重的,这种错误,发生一次就足以要了你的小命,如果恰好在客户的脸上爆炸的话……

解决的方法只有这样:首先保证你的组件代码足够强壮,强壮到不能再强壮为止。还有就是尽量让组件不要是进程内的,如果已经是DLL了,那么就交给COM+ Catalog来管理。这样就解决了因为组件崩溃挂起导致sql-server产生问题。

其次,要让你的组件的创建、方法调用、销毁都快到不能再快,要快到几乎瞬间就完成。否则如果突然有海量数据进来,你的触发器来不及反映,那你的数据就可能被回滚掉,而且这些数据很重要,那你就等着被Fire吧 L 5555~~~~~

如果非要用这种方法的话,那么就要完成我上面提到的2点,并且最好启用COM+对象池。如果方法需要很长时间才能返回,并且无法优化了,那么就把这些方法移出去,把这些动作在另外的程序里做,让COM方法立刻返回。

总而言之,言而总之,在系统集成的时候如果几个开发厂商没有商量好接口,并且都采用SQL-SERVER数据库,那么关于此类数据的操作,似乎用这样的方法就是最好的补救。

个人觉得有点剑走偏锋的感觉,虽然很锋利,但是难免伤到自己

 


录入时间:2006-06-09 16:14:40 [打印本页] [关闭窗口] [返回顶部]
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

Copyright © 2006-2014 0733168.Com Inc All Rights Reserved
关于我们 | 广告合作 | 联系我们 | 法律声明 | 友情链接 | 意见反馈
本站所收录信息、社区话题、及本站所做之广告均属其个人行为,与本站立场无关
湘ICP备06008436号