谁能给我一些示例源代码,展示如何从本地的 JavaScript 连接到 SQL Server 2005 数据库?我正在我的桌面上学习网络编程。
或者我需要使用任何其他脚本语言吗?如果你有的话,建议一些替代方案,但我现在正在尝试用 JavaScript 来做。我的 SQL Server 本地安装在我的桌面上 — SQL Server Management Studio 2005 和 IE7 浏览器。
谁能给我一些示例源代码,展示如何从本地的 JavaScript 连接到 SQL Server 2005 数据库?我正在我的桌面上学习网络编程。
或者我需要使用任何其他脚本语言吗?如果你有的话,建议一些替代方案,但我现在正在尝试用 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 服务器的更好方法是使用一些服务器端语言,如 PHP、Java、.NET 等。客户端 javascript 应该只用于接口。
并且有关于服务器 javascript 存在的古老传说的传言,但这是另一个故事。;)
这样做真的很糟糕,因为共享您的连接字符串会使您的网站暴露出许多您无法简单修补的漏洞,如果您希望它安全,您必须使用不同的方法。否则,您将向大量受众开放以利用您的网站。
一个完美的工作代码..
<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) + " ");
document.write(rs.fields(1) + " ");
document.write(rs.fields(2) + " ");
document.write(rs.fields(3) + " ");
document.write(rs.fields(4) + "<br/>");
rs.movenext();
}
</script>
SQL 2005+ 支持您几乎可以使用的本机 Web 服务,尽管我不建议这样做,因为您可能面临安全风险。为什么我说差不多。好吧,Javascript 不是 SOAP 原生的,因此实际制作它会更复杂一些。您必须通过XmlHttpRequest
. 检查 google 以获取 Javascript SOAP 客户端。
在 HTA 中使用 JavaScript 我对driver={SQL Server};...
连接字符串没有运气,但命名的 DSN 没问题:
我设置了TestDSN并且它测试正常,然后var strConn= "DSN=TestDSN";
工作,所以我继续进行试验以达到我的内部测试和学习目的。
我们的服务器有几个正在运行的实例,例如server1\dev和server1\Test这让事情变得有点棘手,因为我设法浪费了一些时间忘记转义\
as \\
:)
在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
- 请参阅集成安全性 = True 和集成安全性 = SSPI 之间的差异
请注意 RecordCount 会像-1
使用默认的adOpenForwardOnly类型一样返回。如果您正在处理小的结果集和/或不介意一次在内存中的全部内容,请使用rs.Open(strQuery, objConnection, 3);
(3=adOpenStatic)并且这给出了有效的rs.RecordCount