数据库主动式通知编程

上一篇 / 下一篇  2012-08-28 10:59:33 / 个人分类:数据库

51Testing软件测试网{-NblUP|jmPHG[

  目录

V"J,oeD uO0

bM9sC8p]!ozJ0  概述

5q J'dW4xS"A~051Testing软件测试网 WR&Jk })T

  扩展存储过程51Testing软件测试网/mK,e8tm

51Testing软件测试网+f Xz"A.T.h T

  1、创建扩展存储过程

(GUlW,KB`q,|] B0

H'EO8fH}{0  2、测试动态库51Testing软件测试网 f!E3|y6L)EA(D"uD

51Testing软件测试网$Mnb7\Wv-uZ

  3、创建触发器

^2~Xo:sKm051Testing软件测试网 s(mc1m9c8H:|

  概述51Testing软件测试网!| d1`]Q

51Testing软件测试网)m-ZEk-E"pxs*nU

  当数据库更 新的时候,如插入,删除,修改了数据记录,我们的应用程序需要知道些变更,一般情况下我们会采用轮询的方式.对数据库不间断性地查询,这种方式即不能保证 实时性,又非常损耗服务的性能.那么是否有主动触发的机制,主动通知应用程序哪些记录做了更新呢?目前主要有两种机制:51Testing软件测试网oe/@,l.b.v

51Testing软件测试网 V.~\7W/u/` r

  一,采用扩展存储过程,使用触发器,触发器再调用扩展存储过程,扩展存储过程再把数据通过UDP的通讯方式,发送到应用程序,这样应用程序就会收到数据库更新的通知.

+Yav2H,`4ajF051Testing软件测试网"aE!l?L

  二,SQLServer2005以后的版本,其中Service Broker机制可实现此功能。

I3\ p S9d Ja"z051Testing软件测试网9z;eov+E _(a+J

  扩展存储过程51Testing软件测试网&io*Za ]!Ty

51Testing软件测试网4a*No5`D fw

  此方法的原理大概是这样的:通过触发器调用扩展存储过程,扩展存储过程再通过UDP的通讯方式,把信息发送到应用程序.51Testing软件测试网4GW'q\)H

] m\?ZFp8q~m0  说详细些,就是说,数据库能通过触发器来探知数据库中某些表的增、删、改动作,然后再调用存储过程,存储过程中调用写好的扩展存储过程,扩展存储过程通过UDP通信方式,把数据库发生的事情通知UDP服务端,原理就是这么简单。

7O:o!lK2o*`S6Q)i1P0

h'a"mx,Q+B0  1、创建扩展存储过程

K[&bK$X0i2t t0

a@m:K D0  启动VC++6.0-->新建VC++项目-->扩展存储过程DLL,如图:

rbl,a2o.W0p*_6YZ0

51Testing软件测试网j/PT%y%v

  点击”OK”,在下图的输入框输入扩展存储过程名,如图:51Testing软件测试网3}Y6~U D

51Testing软件测试网;i6A(zL/C

  这里创建完成,在工程中你将看到如下接口:51Testing软件测试网{.BOi KY

51Testing软件测试网+JD/RXl(B

51Testing软件测试网 cM0Q ` b8m!y

  在此接口中编写你想要的操作.大概如下:51Testing软件测试网tA8Y@5FtC&t

6z ]v^4a6E"F0

  注:把动态库从内存中卸载的方法,执行SQL命令:DBCC 动态库名(FREE)//动态库名不要带扩展名51Testing软件测试网{gj.N;P0j [/b hL

  2、测试动态库

B"iT6jU0|0

  动态库创建好了, 那么先测试一下,在数据库中创建扩展存储过程,然后调用存储过程,测试存储过程对动态库的调用是否成功。以下是所有创建,测试,与卸载的方法。51Testing软件测试网\NtM]t

  创建扩展存储过程,SQL命令如下:51Testing软件测试网{P LKepg

  sp_addextendedproc ‘接口名称,上一步骤中第二个图片窗口输入的名称’, '动态库所在路径,可绝对路径亦可相对路径'

J$la!s oY+gu|0

9t4o_Uf S T ?sI0
use master
0\j0lO#N)a y8u0go51Testing软件测试网0aG{KCx7G9is&^
sp_addextendedproc 'TerminalFlagSynchro','.\\TerminalFlagSynchro.dll'
7J$kw7er0//删除过程:
4A4Yj(_^dH0sp_dropextendedproc 'TerminalFlagSynchro'
.Em:`"PEi0//把动态库从内存中卸载51Testing软件测试网qX9x,zRb
DBCC TerminalFlagSynchro ( FREE )51Testing软件测试网7_7`D A*I+G o&Q-f@ N
测试: 
$["yHm] s)U0TerminalFlagSynchro 23554, '13427960374',3

  3、创建触发器

Pm5b'Q!C9^)r0

  测试成功后,创建触发器调用此过程即可。以下为创建触发器示例:

a6L k?ZK0

51Testing软件测试网GMf~zU

USE STATIC_DB51Testing软件测试网 Mp,a&`6W0D|!?!G F
GO
Ty7d5z~wR5v a0/****** Object:  Trigger [dbo].[CarInfoChange]    Script. Date: 12/09/2011 20:14:18 ******/
mO Ki(BsNuY0SET ANSI_NULLS ON
e1d$F` T'p0GO
#Uv z*O4Qw]0SET QUOTED_IDENTIFIER ON51Testing软件测试网7[U0bs]xI-[9Dz8h
GO51Testing软件测试网1o(v't7{*j#I2GH
-- =============================================51Testing软件测试网dIe gcE
-- Author:      <Mingo>
vq6FbI,B)E4Kab0q0-- Create date: <2011-12-10>
bo Qb/A0-- Description: <Car_info表修改触发>
Y"hEgY2H0-- =============================================51Testing软件测试网k'hpQq:t6@*u
alter TRIGGER [dbo].[CarInfoChange]
#U:^5Q4{]+N0   ON  [dbo].[CAR_INFO]
Vu h3D!A N ez0   for INSERT,UPDATE,DELETE51Testing软件测试网J$r4M rw
AS51Testing软件测试网3e"xv_i?6n:u
BEGIN
(n F9CDR8H0    SET NOCOUNT ON;
"n5P:W)czK0    declare @TempCarID int ;
-ra}g6W8R0    declare @SIM    varchar(20);51Testing软件测试网nh:~{Kx o-{*v/J
    declare @Flag int ;51Testing软件测试网Fq%~2Nt#L%@
    Set @Flag = 3;
8v&evW [0w8h#v;vY&z0    if not  exists(select 1 from inserted)--delete51Testing软件测试网)^9LV[ _$f| s H;tY
        begin
8GM5G H4U'z4}0            select  @TempCarID = CARID, @SIM = GSM_NUMBER from deleted
Iv`n2B9g0            Set @Flag = 3;
F6fN-S5| Y9C0        end
k2J g(r5r?(_ l0    else if not exists(select 1 from deleted)--add
I \.p*W(W;L3CNk8s"F0        begin
E3ah Kvb/[E#T2gX*{0            select  @TempCarID = CARID, @SIM = GSM_NUMBER from inserted
F}#{Anq0            Set @Flag = 1;51Testing软件测试网{o&Q8n5~P
        end
o5^uZw(v3l/\:D0    else--update
l&g.|yY C3n{yC0        begin
oa SudpP-w0            select  @TempCarID = CARID, @SIM = GSM_NUMBER from inserted51Testing软件测试网e0S7i9B+Hz1R
            Set @Flag = 2;
1}1YD C,\"]']0        end51Testing软件测试网[,pEd&n4n6A6O
    exec master.dbo.TerminalFlagSynchro @TempCarID,@SIM, @Flag
^q#D3q4AC0END

  以上只是简要说明,如果有不懂的,可以联系我。

s-od9R%N O q{"M9r0

  出自:http://blog.csdn.net/mingojiang51Testing软件测试网 zY)sj4al[


TAG:

 

评分:0

我来说两句

Open Toolbar