如何从浏览器中的JavaScript连接到SQL Server数据库?


285

谁能给我一些示例源代码,以显示如何从JavaScript本地连接到SQL Server 2005数据库?我正在台式机上学习Web编程。

还是我需要使用任何其他脚本语言?如果有其他建议,请提出一些建议,但我现在正尝试使用JavaScript。我的SQL Server是本地安装在桌面上的-SQL Server Management Studio 2005和IE7浏览器。


16
绝对不建议您这样做,但是很高兴看到可能会得出什么答案。
TheTXI

2
我正在寻找从Node.JS(服务器端javascript的实现)连接到数据库的方法,我到达了这里。有人知道我应该去哪里吗?
罗伊·廷克

2
@RoyTinker:有node-postgres和node-mysql。
Janus Troelsen,2012年

1
实际有免费的数据库可以使用吗?

1
您可以使用Node.js和JavaScript编写REST后端,并将其与客户端JavaScript接口。
菲斯·弗拉斯塔

Answers:


701

出于多种原因(不良做法,安全性问题等),您不应该使用客户端javascript访问数据库,但是,如果您确实要执行此操作,请参见以下示例:

var connection = new ActiveXObject("ADODB.Connection") ;

var connectionstring="Data Source=<server>;Initial Catalog=<catalog>;User ID=<user>;Password=<password>;Provider=SQLOLEDB";

connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");

rs.Open("SELECT * FROM table", connection);
rs.MoveFirst
while(!rs.eof)
{
   document.write(rs.fields(1));
   rs.movenext;
}

rs.close;
connection.close; 

连接到sql服务器的更好方法是使用某些服务器端语言,例如PHP,Java,.NET等。客户端javascript仅应用于接口。

并且有关于服务器javascript存在的古老传说的传言,但这是另一个故事。;)


323
祝贺您成为这里唯一真正表明可能的人(尽管不推荐)。
TheTXI

6
尽管这可以在OP的设置中起作用-他确实说过他想学习“ Web编程”-而且在低安全性环境中的Internet Explorer并不是Web编程。
昆丁

27
我不明白为什么这个评论被否定。我解释了如何做,但告诉他不要使用它。
Fabio Vinicius Binder'09年

26
fbinder:有些人会否决这一提议,因为他们认为任何尝试进行数据库连接和通过JavaScript查询的做法都是大禁忌(即使您清楚地指出了这一点)。如果我是您,我不会介意您对此一票或二票否定票,只是享受它会获得的大量赞成票,因为它是唯一可以实际回答所提出问题的答案。
TheTXI

36
但是,应该注意的是,由于使用了ActiveX,该答案可能不适用于非IE浏览器(即使最初的张贴者明确说明了他对IE的使用)。
TheTXI

25

这样做确实很不好,因为共享连接字符串会使您的网站面临许多漏洞,您无法简单地对其进行修补,因此如果您想确保其安全性,则必须使用其他方法。否则,您将向大量受众开放,以利用您的网站。


7
给予好评,因为你实际上解释了为什么这是一个坏主意
反胶束工程师

安全提示比技术解决方案更有用,更重要
saber tabatabaee yazdi 2016年

9
否决票是因为OP并没有问这是好还是坏的做法,他们问如何做。您可以在一个实际的答案中插入为什么这可能不是一个好主意,但是仅仅说这是一个坏主意就不应该当成自己的答案,它充其量只是一条评论。
摇晃

1
如果您只是在安全防火墙后写一些东西以与本地服务器交互,那该怎么办?
布莱恩·布莱斯

如果我错了,请纠正我,但是如果提供的用户是只读的,并且您可以管理他们可以访问的表,那么从技术上讲,这是安全的,直到发生更改为止,不是吗?除非整个数据库包含非敏感信息,否则我也不建议。可以将敏感信息放入另一个数据库中。我可以想象这对于没有敏感信息的静态网站很有用。如果需要身份验证,可以在另一台服务器上使用oautj2异步。
Joe Flack

11

完美的工作代码

    <script>
    var objConnection = new ActiveXObject("adodb.connection");
    var strConn = "driver={sql server};server=QITBLRQIPL030;database=adventureworks;uid=sa;password=12345";
    objConnection.Open(strConn);
    var rs = new ActiveXObject("ADODB.Recordset");
    var strQuery = "SELECT * FROM  Person.Address";
    rs.Open(strQuery, objConnection);
    rs.MoveFirst();
    while (!rs.EOF) {
        document.write(rs.fields(0) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        document.write(rs.fields(1) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
        document.write(rs.fields(2) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ");
        document.write(rs.fields(3) + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;    ");
        document.write(rs.fields(4) + "<br/>");
        rs.movenext();
    }
</script>

10

网页服务

SQL 2005+支持您几乎可以使用的本机Web服务,尽管我不建议这样做,因为您可能会面临安全风险。我为什么几乎要说。好吧,Javascript不是SOAP原生的,因此实际制作起来会有些复杂。您必须通过发送和接收SOAP XmlHttpRequest。在Google上检查Javascript SOAP客户端。


5

在HTA中使用JavaScript玩游戏时,我对driver={SQL Server};...连接字符串不满意,但是命名为DSN没问题:
我设置了TestDSN并对其进行了测试,然后var strConn= "DSN=TestDSN";工作了,因此我进行了内部测试和学习目的的实验。

我们的服务器有几个实例正在运行,例如server1 \ devserver1 \ Test,这使事情变得有些棘手,因为我设法浪费了一些时间来忘记转义\as \\:)
server=server1;instanceName=dev连接字符串中出现一些死胡同之后,我最终得到了这个一个工作:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

使用Windows凭据而不是提供用户/密码,我发现发现Integrated Security = truev Integrated Security = SSPIv 的微妙之处是一个有趣的转移Trusted_Connection=Yes-请参阅 Integrated Security = True和Integrated Security = SSPI之间的区别

请注意,RecordCount会像-1使用默认的adOpenForwardOnly类型一样返回。如果您使用较小的结果集和/或不介意一次存储全部内存,请使用rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic),这样可以得出一个有效的结果。rs.RecordCount


4

如前所述,不应使用客户端Javascript完成此操作,但是有一个框架可以更安全地实现您想要的内容。

Nodejs是一个框架,它允许您使用javascript编写服务器连接代码,因此请查看Nodejs,您可能会学到更多有关与数据库通信和获取所需数据的知识。


3

(很抱歉,这是有关SQL后端的更通用的答案-我尚未阅读有关SQL Server 2005的WebServices功能的答案。尽管此功能仍通过HTTP运行,而不是直接通过套接字运行,所以从本质上讲,它们已经建立小型Web服务器连接到数据库服务器,因此此答案仍然是您可以采取的另一种方法。)

您也可以直接使用套接字(Google“ javascript套接字”)进行连接,这时我的意思是为此目的使用Flash文件,尽管HTML5将Web套接字作为规范的一部分,我相信您可以做同样的事情。

有人引用了安全性问题,但是,如果您正确设计了数据库权限,从理论上讲,您应该能够从任何前端(包括OSQL)访问数据库,并且不会出现安全漏洞。那么,安全问题将在于您是否未通过SSL连接。

最后,尽管如此,我很确定这都是理论上的,因为我不相信有任何JavaScript库可用于处理SSL或SQL Server的通信协议,因此除非您愿意自己解决这些问题,否则最好在浏览器和数据库之间使用Web服务器和服务器端脚本语言。


2
说得好。直接从客户端(即曾经制造的每个胖客户端)而不是通过Web服务访问数据库都没有错。如果您使用Windows身份验证和良好的安全层,那么这没什么问题
Nick.McDermaid

1

我不认为您可以从客户端JavaScript连接到SQL Server。您需要选择一些服务器端语言来构建可与数据库交互的Web应用程序,并仅使用javascript来使您的用户界面更好地与之交互。

您可以根据自己的语言偏好选择任何服务器端脚本语言:

  • 的PHP
  • 网络
  • Ruby On Rails

1
这是我能找到的唯一真实答案之一。我应该调查哪些ASP.net选项?除了Microsoft驱动程序之外,我还需要什么?
Rachael 2014年

您可能会使用ADO.Net或Entity Framework / LinqToSql-实际上是其中任何一种。
维克拉姆2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.