【问题标题】:How to connect to SQL Server database from JavaScript in the browser?如何在浏览器中从 JavaScript 连接到 SQL Server 数据库?
【发布时间】:2009-05-13 12:26:07
【问题描述】:

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

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

【问题讨论】:

  • 绝对不建议你这样做,但很高兴看到它可能会得到什么答案。
  • 我正在寻找从 Node.JS 连接到数据库(服务器端 javascript 的实现),我来到了这里。有人知道我应该去哪里吗?
  • @RoyTinker:有 node-postgres 和 node-mysql。
  • 实际有没有免费的数据库可以使用?
  • 您可以使用 Node.js 和 JavaScript 编写一个 REST 后端,并将其与您的客户端 JavaScript 接口。

标签: javascript sql-server database-connection


【解决方案1】:

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

【讨论】:

  • 恭喜您成为这里唯一真正证明这是可能的人(尽管不推荐)。
  • 虽然这可以在 OP 的设置上工作 - 他确实说过他想学习“网络编程” - 而低安全环境中的 Internet Explorer 不是网络编程。
  • 我不明白为什么这条评论被视为反对票。我解释了怎么做,但告诉他不要使用它。
  • fbinder:有些人会投反对票,因为他们认为任何尝试数据库连接和从 JavaScript 查询都是一个很大的禁忌(即使你说得很清楚)。如果我是你,我不会介意你在这件事上得到一两个反对票,只是享受它将收到的众多赞成票,因为它是唯一真正回答所提出问题的答案。
  • 然而,应该注意的是,由于使用了 ActiveX,这个答案可能不适用于非 IE 浏览器(即使原始发帖人明确表示他使用了 IE)。
【解决方案2】:

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

【讨论】:

  • 赞成,因为您实际上解释了为什么这是一个坏主意
  • 安全提示比技术解决方案更有用、更重要
  • 投反对票,因为 OP 没有问这是好还是坏的做法,他们问如何。您可以在实际 ANSWER 中插入为什么它可能是一个坏主意,但仅仅说这是一个坏主意不应该成为它自己的答案,它充其量只是一个评论。
  • 如果你只是在安全防火墙后面编写一些东西来与本地服务器交互,这仍然很糟糕吗?
  • 为什么要共享连接字符串?如果我们在一个私有网络(通常是 Intranet)上并且连接字符串是由少数受信任的用户输入的怎么办?不要将连接字符串留在源代码中。
【解决方案3】:

一个完美的工作代码..

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

【讨论】:

    【解决方案4】:

    网络服务

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

    【讨论】:

      【解决方案5】:

      在 HTA 中使用 JavaScript 我没有使用driver={SQL Server};... 连接字符串,但命名的 DSN 没问题:
      我设置了 TestDSN 并且测试正常,然后var strConn= "DSN=TestDSN"; 工作了,所以我继续进行实验以用于我的内部测试和学习目的。

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

      使用 Windows 凭据而不是提供用户/密码,我发现一个有趣的转移是发现 Integrated Security = true v Integrated Security = SSPI v Trusted_Connection=Yes 的微妙之处 - 请参阅 Difference between Integrated Security = True and Integrated Security = SSPI

      请注意,如果使用默认的 adOpenForwardOnly 类型,RecordCount 将返回 -1。如果您正在处理较小的结果集和/或不介意一次在内存中存储全部内容,请使用 rs.Open(strQuery, objConnection, 3);(3=adOpenStatic),这会给出有效的 rs.RecordCount p>

      【讨论】:

        【解决方案6】:

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

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

        • PHP
        • ASP.Net
        • Ruby On Rails

        【讨论】:

        • 这是我能找到的唯一真实答案之一。我应该调查哪些 ASP.net 选项?除了微软驱动,我还需要什么?
        • 您可能会使用 ADO.Net 或 Entity Framework / LinqToSql - 实际上任何这些。
        【解决方案7】:

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

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

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

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

        【讨论】:

        • 说得好。直接从客户端(即所有的胖客户端)而不是通过 Web 服务访问数据库并没有错。如果您使用 Windows 身份验证和良好的安全层,这没有什么问题
        【解决方案8】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-02-19
          • 2016-11-29
          • 1970-01-01
          • 1970-01-01
          • 2013-12-14
          • 1970-01-01
          • 1970-01-01
          • 2014-10-30
          • 2012-05-05
          相关资源
          最近更新 更多