如何在浏览器中通过JavaScript连接到SQL Server数据库?

任何人都可以给我一些示例源代码显示如何从本地连接到SQL Server 2005数据库? 我正在学习桌面上的networking编程。

还是我需要使用任何其他脚本语言? build议一些替代品,如果你有他们,但我现在试图用JavaScript来做到这一点。 我的SQL Server本地安装在我的桌面上 – SQL Server Management Studio 2005和IE7浏览器。

你不应该使用客户端的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 server的更好方法是使用一些服务器端语言,如PHP,Java,.NET等等。 客户端JavaScript应该只用于接口。

还有一个关于服务器javascript存在的古老传说的传闻,但这是另一回事。 ;)

这样做的确很糟糕,因为共享连接string会将您的网站打开到很多漏洞,以至于无法简单修补,如果您希望安全,则必须使用其他方法。 否则,你是开放给庞大的观众利用您的网站。

一个完美的工作代码

  <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> 

网页服务

SQL 2005+支持你几乎可以使用的本地Web服务,虽然我不会build议它,因为你可能面临的安全风险。 为什么我差点说。 那么Javascript不是SOAP原生的,所以实际上它会更复杂一些。 你必须通过XmlHttpRequest发送和接收SOAP。 检查谷歌的JavaScript SOAP客户端。

在HTA中使用JavaScript我没有运气与driver={SQL Server};...连接string,但一个名为DSN是好的:
我设置了TestDSN并且testing了OK,然后var strConn= "DSN=TestDSN"; 工作,所以我继续试验我的内部testing和学习的目的。

我们的服务器有几个运行的实例,例如server1 \ devserver1 \ Test ,这使得事情变得稍微复杂一些,因为我设法浪费了一些时间,忘记了\作为\\ 🙂
server=server1;instanceName=dev连接string的一些死胡同后,我终于得到了这个工作:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

使用Windows证书而不是提供用户/密码,我发现一个有趣的分stream是发现Integrated Security = true微软的Integrated Security = true Integrated Security = SSPI v Trusted_Connection=Yes – 请参阅差异集成安全=真和集成安全= SSPI

注意,如果使用默认的adOpenForwardOnlytypes,RecordCount将返回-1 。 如果你正在处理小的结果集和/或不在意内存在整个内存,使用rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic),并给出一个有效的rs.RecordCount

如前所述,不应该使用客户端的JavaScript,但有一个框架来实现你想要更安全。

Nodejs是一个框架,它允许你用JavaScript代码服务器连接,所以看看Nodejs,你可能会更多的了解与数据库的通信和抓取你需要的数据。

(对不起,这是一个关于SQL后端的更一般的答案 – 我没有阅读关于SQL Server 2005的WebServices特性的答案,尽pipe这个特性仍然通过HTTP运行,而不是直接通过套接字运行,所以本质上他们已经构build一个迷你networking服务器到数据库服务器,所以这个答案仍然是你可以采取的另一条路线。)

您也可以直接使用套接字(谷歌“JavaScript套接字”),直接在这一点上,我的意思是使用Flash文件来达到这个目的,虽然HTML5有Web套接字作为规范的一部分,我相信让你做同样的事情。

有些人提到了安全问题,但是如果你正确地devise了你的数据库权限,你理论上应该可以从任何前端访问数据库,包括OSQL,而不会有安全漏洞。 那么,如果你没有通过SSL连接,安全问题就会出现。

最后,我敢肯定,这完全是理论上的,因为我不相信任何JavaScript库存在处理SSL或SQL Server的通信协议,所以除非你愿意自己弄清楚这些东西,更好地走在浏览器和数据库之间的networking服务器和服务器端脚本语言的路线。

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

你可以根据你的语言偏好select任何服务器端脚本语言:

  • PHP
  • ASP.Net
  • Ruby on Rails