是否可以在客户端端的javascript中调用存储过程?
我知道如何在服务器端进行操作,但我对客户端方面的操作感兴趣。
基本上,它归结为直接从客户端内部联系SQL服务器。那可能吗?
答案 0 :(得分:3)
tldr;不可以,无法从浏览器JavaScript 1 直接连接到SQL Server。
JavaScript可以“说”HTTP和WebSockets,但SQL Server“说”TDS。要进行通信,需要有一个客户端和服务器都使用的通用介质/协议。
虽然WebSocket proxies在技术上使这成为可能,但它仍然需要单独的代理服务(并且您仍然需要编写/查找JavaScript TDS驱动程序)。我不建议删除受控访问层。
同样,可以使用HTTP代理,其中向客户端发送原始SQL命令或从客户端发送原始SQL命令。我也不会这样做,但有些确实存在。
外部代码/库(例如ActiveX,Java)可以通过JavaScript客户端建立SQL连接和代理。
在所有这些情况下都有一个中间帮助器和浏览器 - JavaScript永远不会“直接”连接。
1 JavaScript是一种语言,本答案主要关注具有浏览器支持的库/函数的浏览器实现。有人可能会说使用节点模块仍然是“JavaScript”,并且在不同的环境中它们是正确的。
答案 1 :(得分:1)
您无法从客户端的Web浏览器建立与数据库的直接连接。您需要做的是创建一个服务器端应用程序,以公开用于通过HTTP获取数据的API。
查看微软的ASP.NET Web API
答案 2 :(得分:1)
排序
您可以创建一个端点,该端点是存储过程的包装器,它将过程名称作为参数,以及过程的参数。
一旦有了这样的机制,就可以创建自动公开程序的端点。
http://yourserver/services/yourprocname?prm1=val,prm2=val,etc
如果您真的有野心,可以试用SQL 2016并直接从这些程序返回JSON。然后,您可以使用子查询嵌套数据,并在单个有效负载中返回JSON。没有序列化,没有对象,只是读取数据并返回它。
< 2016年你可以把结果放到一个字典中并使用NewtonSoft来序列化它。假设您正在返回平面数据,那么您将很高兴。只需使用一个阅读器,从键的列名中获取元数据,并将值作为对象。 NewtonSoft会为您将其转换为JSON。
如果你要返回层次结构,你可以(按照惯例)创建一系列带有阅读器的运行器,并将其泵入一个Dictionary,其中对象是另一个词典。再次,Newtonsoft的东西将帮助你进行序列化。
希望这有帮助,我们在2016年使用这种方法,能够创建存储过程并在没有任何中间层代码,部署等的情况下调用它非常好。它只是有效。
希望这有帮助。
答案 3 :(得分:1)
是的,您可以使用WebAssembly直接从客户端连接到SQL Server。您可以编写首先使用C或C ++调用SQL Server的函数。通过Emscripten编译器将其编译为.Wasm。然后,您可以使用JavaScript调用C或C ++代码。将来,你应该可以用C#做到这一点,但微软刚开始研究它。 我正在写一篇关于它的帖子,我会在它准备好后分享它。 现在只是因为你可以做到这一点,并不意味着你应该因为安全问题。但我不是在这里就你应该或不应该做什么做一个演讲。