SQLServer 調用 WebAPI [WSDL]

2023-05-16

 

某陌習慣調用ASMX文件,開發語言最近比較常用C#

結果這次合作的同事習慣用Python,還強調只會用REST風格的WebService

某陌心想這不是WebAPI嗎?趕緊學習……

正式引入WebAPI之前先簡單說明一下 RESTful 风格的地址

示例(和我之前常用的.asmx文件略有不同,不以.asmx結尾):

https://blog.csdn.net/sinat_28782331

SoapUI執行效果就是某陌博客的主頁。

不過這個也不影響啦~沒必要一定讓python開發的API轉化成ASMX格式,SQL其實也是可以調用這種網址的,就算放在Anaconda 上的 WebService 也是不受影響的。

這里簡單寫了一個Demo:

Python代碼如下

from flask import Flask, request, render_template

 

app = Flask(__name__)

 

@app.route('/loginurl', methods=['GET', 'POST'])

def login():

    #  利用request取得使用者端傳來的方法為何

    if request.method == 'POST':

                          #  利用request取得表單欄位值

        return 'Hello ' + request.values['username']

    

    #  非POST的時候就會回傳一個空白的模板

   return render_template('login.html')

 

if __name__ == '__main__':

    app.debug = True

    app.run()  

 

login.html代碼如下

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Hello Page</title>

</head>

<body>

    <form method='post' action={{ url_for('login') }}>

        <p>

        <input type='text' name='username' />

    </p>

        <p>

        <button type='submit'>Submit</button>

    </p>

    </form>

</body>

</html>

由上可知:GET返回的是默認的login.html

Declare @Object as Int
Declare @ResponseText as nvarchar(4000)
Declare @ServiceUrl varchar(max)='http://10.4.97.211:82/loginurl' --url自定義
EXEC sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; --創建OLE元件物件
Exec sp_OAMethod @Object, 'open', NULL, 'get',@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',NULL
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT --輸出參數
Select @ResponseText      --輸出結果
Exec sp_OADestroy @Object

返回結果:

#  非POST的時候就會回傳一個空白的模板
<!DOCTYPE html> 
<html lang="en"> 
<head>     
<meta charset="UTF-8">     
<title>Hello Page</title> 
</head> 
<body>     
<form method='post' action=/loginurl>         
<p>         
<input type='text' name='username' />     
</p>         
<p>         
<button type='submit'>Submit</button>     
</p>     
</form> 
</body> 
</html> 

POST返回 hello + username

Declare @Object as Int
Declare @ResponseText as nvarchar(4000)
Declare @ServiceUrl varchar(max)='http://10.4.97.211:82/loginurl' --url自定義
Declare @RequestText as varchar(8000);
set @RequestText='username=123' --此處值參如果有多個,用&分隔,例 username=123&password=123
EXEC sp_OACreate 'MSXML2.XMLHTTP.3.0', @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'
--EXEC sp_OAMethod @object, 'setRequestHeader', null, 'SOAPAction', 'login'
Exec sp_OAMethod @Object, 'send',NULL,@RequestText
EXEC sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT --輸出參數
--EXEC SP_OAGETERRORINFO @OBJECT
Select @ResponseText      --輸出結果
Exec sp_OADestroy @Object

返回結果:Hello 123

參考資料:

soapUI使用教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLServer 調用 WebAPI [WSDL] 的相关文章

  • 将 5 gig 文件导入表时出错

    我正在尝试批量插入表 use SalesDWH go BULK INSERT dbo npi FROM S tmp npi csv WITH FIELDTERMINATOR ROWTERMINATOR n lastrow 200 first
  • 在 Dockerfile 中切换到 root 用户

    我运行了这个命令 docker pull mcr microsoft com mssql server 2019 latest 然后我创建了一个 dockerfile 来使用此容器映像作为另一个容器的基础映像 escape FROM mcr
  • 如何删除实体框架6中的多对多关系

    如果将项目连接为多对多关系 则从数据库中删除项目时会出现问题 我的数据库看起来像 Project lt JobInProject gt Job ProjectID JobInProjectID JobID ProjectID JobID 主
  • 执行存储过程时 ExecuteNonQuery() 返回 -1

    我正在尝试在 Visual Studio 中执行存储过程 下面给出 CREATE PROCEDURE dbo addStudent stuName varchar 50 address varchar 100 tel varchar 15
  • 使用输出在合并语句中设置变量

    我有一个合并语句应该始终更新或插入一条记录 我想记住变量中该语句的 ID 它看起来像这样 DECLARE int int MERGE dbo table AS A USING SELECT stringtomatch AS string A
  • 如何检查Azure SQL数据库中是否已存在数据库用户

    我的新客户计划使用 Azure 托管 SQL 数据库服务 我正在使用 dacpac 来部署数据库 在 dacpac 中 我有一个部署后脚本 用于创建 sql 用户 如下所示 IF NOT EXISTS SELECT name FROM sy
  • 如何使用索引更改表的列?

    我想将带有某些索引的表中 a 列的列大小从 varchar 200 更改为 varchar 8000 我应该如何进行 既然是VARCHAR你正在增加尺寸 然后简单地ALTER TABLE ALTER COLUMN https learn m
  • NOLOCK 和 UNCOMMITTED 之间有什么区别

    我使用 SQL Server 2012 我写了两个查询 但是它们之间有什么不同NOLOCK and UnCommitted SELECT lastname firstname FROM HR Employees with READUNCOM
  • SQL Server 为什么索引不与 OR 一起使用

    我一直在研究索引并试图了解它们是如何工作的以及如何使用它们来提高性能 但我错过了一些东西 我有下表 Person Id Name Email Phone 1 John E1 P1 2 Max E2 P2 我正在尝试找到对列进行索引的最佳方法
  • SQL Server 2017 快速安装失败

    我尝试在 Windows 10 上安装 SQL Server 2017 Express 但失败 这是失败后向我显示的详细信息 Action required Use the following information to resolve
  • 需要在SQL Server 2012中自动递增字符串

    考虑 SQL Server 2012 中的表 789 0000000 上面的数字在 SQL Server 2012 中将被视为字符串 但每当我更新记录时 我都需要增加到 1 例如 当我更新记录 1 时 它应该增加到789 0000001 当
  • C# 与 INSERT 存储过程 \r\n 问题

    基本上我有一个非常简单的插入语句 INSERT INTO dbo ORDER ORDER DATE ORDER TYPE ID PAYMENT STATUS ID TOTAL COST SENDER NAME SENDER EMAIL SE
  • T-SQL 插入或更新

    我有一个关于 SQL Server 性能的问题 假设我有一张桌子persons包含以下列 id name surname 现在 我想在此表中插入一个新行 规则如下 If id表中不存在 则插入该行 If id存在 然后更新 我这里有两个解决
  • 我可以采取哪些措施来提高 SQL Server 中纯用户定义函数的性能?

    我制作了一个简单但计算相对复杂的 UDF 用于查询很少更改的表 在典型用法中 该函数会在一个非常小的参数域上从 WHERE 子句中多次调用 如何才能更快地使用 UDF 我的想法是应该有某种方式告诉 SQL Server 我的函数使用相同的参
  • SQL Server 内部级联更新/删除如何工作?

    好吧 我相信这个问题还不清楚 这里我用另一种方式重写它 假设我创建两个表 table1 c1 int PRIMARY KEY table2 table1c11 int 之间存在关系table1 and table2 i e table1 c
  • 无法找到请求的.Net Framework 数据提供程序。 (Sql客户端)

    我正在尝试使用来自 SQL Server 2005 的 DB First 迁移来设置一个简单的 ASP NET MVC 4 Web 应用程序 我已经在数据库中创建了表 并使用实体框架在代码中创建了对象 我可以使用这些对象访问数据 当我尝试使
  • 如何确定给定的表是否是内存优化的?

    早上好 我的第一个问题是如何确定在 MS SQL Server 中创建的表是否是内存优化的 我有一些表 但我不记得我创建的其中一些表是否经过内存优化 非常感谢您的回答 为了重复这里的另一个答案 这是一种获取状态的方法all数据库中的表 se
  • 在 ms-sql 中查找最近的位置

    我将这些参数发送给我的脚本 纬度 41 0186 经度 28 964701 它是示例 我想找到最近的位置的名称 这个怎么做 查询必须更改代码的位置 sql查询 SELECT Name FROM Location WHERE Latitude
  • SQL Server 2012 中带有“AND”运算符的“LIKE”子句

    我的要求与该线程完全相同 如何在 SQL Server 中使用 JOIN LIKE 和 AND 运算符 https stackoverflow com questions 39745766 how to use join like with
  • SQL Server 中带条件的多个计数函数

    我想合并 SQL Server 中的一些表 我想要获得的是如下图所示的东西 假设我有 tes A tes B tes C 和 tes jumlah 表 tes jumlah 是 tes A tes B 和 tes C 表的组合 请注意 ju

随机推荐