/*

Sqlserver数据库开始相关服务

以下示例显示了如何查看 OLE Automation Procedures 的当前设置。0未启用

*/

EXEC sp_configure 'show advanced option', '1' --只有这个高级选项被打开的时候,才有权限修改其他配置。

go

RECONFIGURE --运行RECONFIGURE语句进行安装,也就是说,使以上语句生效

go

EXEC sp_configure 'Ole Automation Procedures';

GO

--启用Ole Automation Procedures

sp_configure 'show advanced options', 1;

GO

RECONFIGURE;

GO

sp_configure 'Ole Automation Procedures', 1;

GO

RECONFIGURE;

GO

---通过sql server 2008 调用应用程序

CREATE PROCEDURE [dbo].[pro_NotifyApp](

@Id NVARCHAR(20),

@Content NVARCHAR(MAX)

)

AS

BEGIN

declare @ServiceUrl as varchar(1000)

PRINT 'http://localhost:789/home/GetNotify?id=' + @Id + '&message=' + @Content

--通过http协议调用的接口地址'

set @ServiceUrl = 'http://localhost:789/home/GetNotify?id=' + @Id + '&message=' + @Content

Declare @Object as Int

Declare @ResponseText as Varchar(8000)

Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;

Exec sp_OAMethod @Object, 'open', NULL, 'get',@ServiceUrl,'false'

Exec sp_OAMethod @Object, 'send'

Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT

Select @ResponseText

Exec sp_OADestroy @Object

END

--在对应表上创建 更新触发器,监控数据是否有变化,变化即刻通知应用程序

CREATE TRIGGER notify_trigger ON [dbo].[TestTable]

AFTER UPDATE

AS

BEGIN

/*

update触发器会在更新数据后,

将更新前的数据保存在deleted表中,更

新后的数据保存在inserted表中。

*/

DECLARE @UpdateID NVARCHAR(20)

DECLARE @UpdateContent Varchar(MAX)

set @UpdateID=(select Deleted.D_Id from Deleted)

set @UpdateContent=(select Inserted.D_Amount from Inserted)

EXEC pro_NotifyApp @UpdateID, @UpdateContent

END

//mvc项目 http://localhost:789/home/GetNotify

public ActionResult GetNotify()

{

string id = Request["id"];

string message = Request["message"];

//插入数据

string txt = string.Empty;

var date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

txt = string.Format("{0} ID:{1} Message:{2}", date, id, message);

FileStream fs = null;

StreamWriter sw = null;

try

{

string path = "D:\\111.txt";//文件的路径,保证文件存在。

fs = new FileStream(path, FileMode.Append);

sw = new StreamWriter(fs);

sw.WriteLine(txt);

}

catch (Exception)

{

throw;

}

finally

{

sw.Dispose();

sw.Close();

fs.Dispose();

fs.Close();

}

return null;

}

--测试

/*触发器两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,

deleted 保存的是 delete 或 update 之前所影响的记录形成的表。*/

UPDATE dbo.TestTable SET D_Amount=209 WHERE D_Id=5004

4126c805fbe318f0bde5e94e23234fe6.png

868a578bc54aab95d8c8d050564a3a1e.bmp

Logo

一站式 AI 云服务平台

更多推荐