309

谁能给我一些示例源代码,展示如何在本地从 JavaScript 连接到 SQL Server 2005 数据库?我正在桌面上学习网络编程。

还是我需要使用任何其他脚本语言?如果你有的话,建议一些替代方案,但我现在正尝试用 JavaScript 来做。我的 SQL Server 本地安装在我的桌面上——SQL Server Management Studio 2005 和 IE7 浏览器。

4

8 回答 8

756

出于多种原因(不良做法、安全问题等),您不应该使用客户端 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存在的古老传说的传言,但这是另一个故事。;)

于 2009-05-13T12:29:45.413 回答
22

这样做真的很糟糕,因为共享您的连接字符串会使您的网站面临许多无法简单修补的漏洞,如果您希望它是安全的,则必须使用不同的方法。否则,您将向大量受众开放以利用您的网站。

于 2011-08-21T21:52:01.577 回答
12

一个完美的工作代码..

    <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>
于 2014-04-01T14:39:22.797 回答
11

网页服务

SQL 2005+ 支持您几乎可以使用的本机 Web 服务,尽管我不建议这样做,因为您可能面临安全风险。为什么我说差不多。好吧,Javascript 不是 SOAP 原生的,所以实际制作它会有点复杂。您必须通过XmlHttpRequest. 检查谷歌的 Javascript SOAP 客户端。

于 2009-05-13T12:37:47.553 回答
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

于 2014-05-01T12:45:47.723 回答
3

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

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

  • PHP
  • ASP.NET
  • Ruby On Rails
于 2009-05-13T12:29:30.250 回答
3

(对不起,这是关于 SQL 后端的更通用的答案——我没有阅读关于 SQL Server 2005 的 WebServices 功能的答案。虽然,这个功能仍然通过 HTTP 运行,而不是更直接地通过套接字,所以基本上他们已经建立一个迷你网络服务器到数据库服务器,所以这个答案仍然是你可以采取的另一条路线。)

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

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

最后,不过,我很确定这都是理论上的,因为我不相信存在任何 JavaScript 库来处理 SSL 或 SQL Server 的通信协议,所以除非你愿意自己弄清楚这些事情最好在浏览器和数据库之间使用 Web 服务器和服务器端脚本语言。

于 2009-05-13T13:01:07.843 回答
3

如前所述,它不应​​该使用客户端 Javascript 来完成,但是有一个框架可以更安全地实现您想要的东西。

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

于 2014-07-14T12:22:46.180 回答