【问题标题】:how to get and store data from 3rd party xml web service into sql table如何从 3rd 方 xml Web 服务获取数据并将其存储到 sql 表中
【发布时间】:2016-09-22 07:09:13
【问题描述】:

有什么方法可以直接获取第 3 方 Web 服务 XML 数据并将其存储到 SQL Server DB 中?

我知道还有很多其他简单的解决方案,例如 Rest 或 WCF,但就我而言,我想向 SQL 添加新的作业,每天都会触发并从 Web 服务获取数据。

【问题讨论】:

    标签: sql sql-server web-services stored-procedures


    【解决方案1】:

    要连接到一些资源并获得 XML 响应,您可以使用以下代码:

    DECLARE @URI nvarchar(max) = 'http://example.com/',
            @methodName nvarchar(50) ='GET',
            @objectID int,
            @setTimeouts nvarchar(255) = 'setTimeouts(9000,90000,900000,9000000)'
    
    EXEC sp_OACreate 'MSXML2.XMLHTTP', @ObjectID OUT
    
    EXEC sp_OAMethod @objectID, 'open', null, @methodName, @URI, 'false' 
    EXEC sp_OAMethod @objectID, @setTimeouts
    EXEC sp_OAMethod @objectID, 'send', null 
    
    INSERT INTO SomeTable (xmlResponse)
    EXEC sp_OAGetProperty @objectID, 'responseText'
    
    EXEC sp_OAGetErrorInfo @objectID
    EXEC sp_OADestroy @objectID 
    

    您可以评论@setTimeouts部分,如果响应时间可能很大,则需要。

    把它放在存储过程中。将@URI 作为参数传递,这将在SomeTable 中写入响应。然后您可以将EXEC YourStoredProv @URI 放入工作并安排每天的发布。

    编辑

    授权:

    DECLARE @URI nvarchar(max) = 'http://example.com/',
            @auth nvarchar(max),
            @methodName nvarchar(50),
            @objectID int,
            @setTimeouts nvarchar(255) = 'setTimeouts(9000,90000,900000,9000000)'
    
    EXEC sp_OACreate 'MSXML2.XMLHTTP', @ObjectID OUT
    
    SELECT  @auth= @URI + 'AppEngine_2/api_login?user_name=myuserName&password=myPassword%20&TOKEN=chinaurl&CLIENT_TYPE=1%22',
            @methodName='POST'
    
    EXEC sp_OAMethod @objectID, 'open', null, @methodName, @auth, 'false' 
    EXEC sp_OAMethod @objectID, 'send', null 
    
    SELECT  @methodName='GET'
    
    EXEC sp_OAMethod @objectID, 'open', null, @methodName, @URI, 'false' 
    EXEC sp_OAMethod @objectID, @setTimeouts
    EXEC sp_OAMethod @objectID, 'send', null 
    
    INSERT INTO SomeTable (xmlResponse)
    EXEC sp_OAGetProperty @objectID, 'responseText'
    
    EXEC sp_OAGetErrorInfo @objectID
    EXEC sp_OADestroy @objectID 
    

    您可以将myuserNamemyPasswordTOKEN 作为变量作为URL 来获取响应。

    【讨论】:

    • 对不起,但对我不起作用...让我更具体地说,我有 2 个 url - 第一个用于登录,第二个用于数据登录 url = "traffilog.com/AppEngine_2/…" 和数据 url ='@ 987654322@'
    • 然后呢?您可以使用此代码进行授权。看看编辑。
    • 收到此错误,似乎是第 3 方阻止了它 SQL Server 阻止了对组件“Ole 自动化过程”的过程“sys.sp_OACreate”的访问,因为该组件作为安全配置的一部分被关闭为此服务器
    • 查看此问答以启用功能@​​987654323@
    • 是的,但它不起作用......无论如何,谢谢,我用 ajax 请求做到了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多