首 页 | 精品电影 | 音乐天堂 | 在线游戏 | Flash MTV | 三湘书屋 | 幽默笑话 | 三湘图库 | 美女写真 | IT知识库 | QQ贴图 | 加入书签

网页制作网络编程图形图象操作系统冲浪宝典软件教学网络安全认证考试通信技术电子商务业内动态书籍教程原码

最近更新 文章分类 多媒体类 精品软件

本站搜索:
您的位置:三湘时空 -> IT知识库 -> 文章分类 -> 数据库技巧 -> 关于在SQL-SERVER里调用COM组件
关于在SQL-SERVER里调用COM组件


文章类别:数据库技巧 来源: 作者: 发表日期:2006-1-2 字体:[ ]

小游戏 | 在线影院 | 幽默笑话 | 源码下载 | Flash MTV | 音乐试听 | 书屋 | 美女写真

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数据库,那么关于此类数据的操作,似乎用这样的方法就是最好的补救。

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

温柔的毒药    2005-12-30

上一篇:Windows操作系统中安全模式的其它妙用 下一篇:打造WinXP系统万能克隆Ghost全攻略
本栏目热门文章
·Windows XP下安装SQL2000企业版 2005-10-4
·在SQL Server 2000里设置和使用数据库复制 2005-11-13
·SQL Server 数据库管理常用的SQL和T-SQL语句 2005-11-13
·SQL SERVER实用技巧 2005-11-3
·配置SQL Server 2000选项 2005-10-8
·如何使Microsoft SQL Server的日志文件不会增大? 2005-10-4
·SQL中通配符、转义符与"["号的使用(downmoon) 2005-11-3
·Sql Server下数据库链接的使用方法 2005-11-21
·使用SQL Server导入和索引 Microsoft Word 文 2005-10-4
·如何快速杀死占用过多资源(CPU,内存)的数据库进程 2005-11-13
新近更新文章
·Oracle:一条SQL实现将多行数据并为一行显示 2006-6-20
·Link Server的语法 2006-6-20
·通过查询分析器对比SQL语句的执行效率 2006-6-15
·问题“未于信任SQL Server连接相关联”的解决 2006-6-15
·数据库死锁导致网站站点访问不了之解决方案 2006-6-15
·在Access中模拟sql server存储过程翻页 2006-6-12
·SQL 存储过程&算法 2006-6-12
·SQL Server 2005 Express附加(Attach)的 2006-6-9
·在SQL Server 2005中实现表的行列转换 2006-6-6
·枚举SQL Server的实例 2006-6-6
首 页 | 软件发布 | 广告联系 | 下载帮助 | 意见反馈 | 网站地图
  CopyRight? 2002-2004 WWW.SXSKY.NET? All Rights Reserved
三湘时空 站长QQ:82675303 Email: