SQL调用WebService接口

简介:             今天在做一个很奇葩的东西,中间有个过程要在SQL触发器里面调用webservice接口。呵呵~                    ALTER TRIGGER tgr_UpdateMemcachedON dbo.



            今天在做一个很奇葩的东西,中间有个过程要在SQL触发器里面调用webservice接口。呵呵~


                   

ALTER TRIGGER tgr_UpdateMemcached
ON dbo.[User]
AFTER UPDATE

	
AS
	--获得更新前的数据
	--SELECT * FROM Deleted AS OldData
	
	--获得更新后的数据
	--SELECT * FROM Inserted AS NewData

	--调用webService----------------
	declare @ServiceUrl as nvarchar(1000) 
	DECLARE @UrlAddress nvarchar(500)

	--WebService地址:以http开头,结尾带斜杠,例如'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx/' 
	set @UrlAddress = 'http://localhost/webService_UpdateCache/WebService1.asmx'


	DECLARE @FunName nvarchar(50)--WebService中调用的方法名:例如'getMobileCodeInfo'
	SET @FunName = 'UpdateCache'   

	--以下参数对应WebService中4个参数的[参数名]
	declare @UserCode  nvarchar(36),@UserName  nvarchar(36),@UserAge  nvarchar(36)
	SET @UserCode='UserCode'
	SET @UserName='UserName'
	SET @UserAge='UserAge'


	--拼接参数名称
	DECLARE @UserCode_Value nvarchar(50)='0000',@UserName_Value  nvarchar(50)='0000',@UserAge_Value  nvarchar(50)='0000'

	SELECT * FROM Inserted 

	SELECT @UserCode_Value=LTrim(RTrim(UserCode)),@UserName_Value=LTrim(RTrim(UserName)),@UserAge_Value=LTrim(RTrim(UserAge)) FROM Inserted ;--从inserted表给参数赋值
	
	--拼接地址
	SET @ServiceUrl = @UrlAddress +'/'+ @FunName  + '?' + @UserCode + '=' + [dbo].[UrlEncode](@UserCode_Value) +'&' + @UserName + '=' +[dbo].[UrlEncode](@UserName_Value) +'&' + @UserAge + '=' + [dbo].[UrlEncode](@UserAge_Value) 
	--SET @ServiceUrl = @UrlAddress +'/'+ @FunName  + '?' + @UserCode + '=' + @UserCode_Value +'&' + @UserName + '=' +@UserName_Value +'&' + @UserAge + '=' + @UserAge_Value 

	--SELECT @ServiceUrl --查看拼接地址,调试时打开

	--访问地址获取结果
	Declare @Object as Int
	Declare @ResponseText as nvarchar(4000) 
	           
	EXEC sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; --创建OLE组件对象
	Exec sp_OAMethod @Object, 'open', NULL, 'post',@ServiceUrl,'false' --打开链接,注意是get还是post	
	EXEC sys.sp_OAMethod @object,'setRequestHeader',NULL,'Content-Type','application/x-www-form-urlencoded;charset=UTF-8'
	Exec sp_OAMethod @Object, 'send'
	EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT --输出参数
	Select @ResponseText      --输出结果
	Exec sp_OADestroy @Object
	GO




        

    为了使SQL可以想代码里面对参数进行编码和解码,还需要加入下面自定义函数:


           

USE [TestMemcached]
GO
/****** Object:  UserDefinedFunction [dbo].[UrlEncode]    Script Date: 2015/7/6 21:36:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER FUNCTION [dbo].[UrlEncode]

(

    @Param NVARCHAR(2000)

)

RETURNS VARCHAR(MAX)

AS

BEGIN

    DECLARE @HexStr VARCHAR(MAX)

    --Use system function to convert input string to hex string

    SET @HexStr = master.dbo.fn_varbintohexstr(CONVERT(VARBINARY(MAX), @Param))

    --Remove the starting '0x'

    SET @HexStr = RIGHT(@HexStr, LEN(@HexStr)-2)

    --Declare required variables

    DECLARE @I INT, @Len INT

    DECLARE @Output VARCHAR(MAX), @S CHAR(4), @C CHAR(1)

    DECLARE @LoByte TINYINT, @HiByte TINYINT

    --Get length

    SET @Len=LEN(@HexStr)/4

    --Start with first character

    SET @I=0

    --Prepare the output string

    SET @Output=''

    WHILE @I<@Len

        BEGIN

        SET @S=SUBSTRING(@HexStr, @I*4 + 1, 4)

        IF RIGHT(@S, 2)='00'

            BEGIN

            --Try to convert 2 hex digits to char

            SET @LoByte = ASCII(SUBSTRING(@S, 2, 1)) - 48

            IF @LoByte>10 SET @LoByte = @LoByte - 39 --0x61'a'-> 10

            SET @HiByte = ASCII(SUBSTRING(@S, 1, 1)) - 48

            IF @HiByte>10 SET @HiByte = @HiByte - 39

            SET @C=CHAR(@LoByte + @HiByte * 16)

            --If it's a reserved character, don't encode

            IF @C LIKE '[A-Za-z0-9()''*-._! ]'

                SET @Output = @Output + @C 

            ELSE

                SET @Output = @Output + '%' + LEFT(@S, 2)

            END

        ELSE

            SET @Output = @Output + '%u' + RIGHT(@S, 2) + LEFT(@S, 2)

        --Move to next hex 

        SET @I = @I + 1

        END

    

RETURN @Output

END


          同时要注意webservice里面的方法哟:


      

 [WebMethod]
        public bool UpdateCache(string UserCode, string UserName, string UserAge)
        {
           // HttpContext.Current.Response.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
           //string action = HttpUtility.UrlDecode(HttpContext.Current.Request.QueryString["UserName"]);
           // string a = HttpContext.Current.Request.QueryString["UserName"];


            UserCode = HttpUtility.UrlDecode(UserCode);
            UserName = HttpUtility.UrlDecode(UserName);
            UserAge = HttpUtility.UrlDecode(UserAge);
            return MemCache.GetInstance().Replace<ClassLib.User>(UserCode, new ClassLib.User() { UserCode = UserCode, UserName = UserName, UserAge = UserAge });
            
        }





目录
相关文章
|
SQL 存储 Java
JDBC Statement:执行 SQL 语句的重要接口
在Java应用程序中,与数据库进行交互是一项常见的任务。为了执行数据库操作,我们需要使用JDBC(Java Database Connectivity)来建立与数据库的连接并执行SQL语句。Statement接口是JDBC中的一个重要接口,它用于执行SQL语句并与数据库进行交互。本文将详细介绍Statement接口的使用,包括如何创建Statement对象、执行SQL语句、处理结果等内容。
328 0
phpstorm插件应用:Test RESTful WEB Service 控制台接口调试工具
phpstorm插件应用:Test RESTful WEB Service 控制台接口调试工具
208 0
|
21天前
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
38 5
|
3月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
62 10
|
3月前
|
XML 前端开发 Java
JAVA调试webservice接口
JAVA调试webservice接口
50 0
|
5月前
|
SQL 安全 Java
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
访问者模式问题之在上面的 SQL 结构定义中, sealed 接口的作用如何理解
|
6月前
|
XML Java API
使用WebService接口进行数据通信
使用WebService接口进行数据通信
|
7月前
|
SQL 数据库 C语言
【sqlite的C语言访问接口】执行SQL语句的接口------sqlite3_exec回调函数的使用
【sqlite的C语言访问接口】执行SQL语句的接口------sqlite3_exec回调函数的使用
|
7月前
|
SQL 关系型数据库 数据库
nacos 2.2.3版本 查看配置文件的历史版本的接口 是针对MySQL数据库的sql 改成postgresql后 sql语句报错 该怎么解决
在Nacos 2.2.3中切换到PostgreSQL后,执行配置文件历史版本分页查询出错,因`LIMIT 0, 10`语法不被PostgreSQL支持,需改为`LIMIT 10 OFFSET 0`。仅当存在历史版本时报错。解决方案是调整查询SQL以兼容PostgreSQL语法。
|
6月前
|
XML Java API
使用WebService接口进行数据通信
使用WebService接口进行数据通信