谁能给我一些示例源代码,以显示如何从JavaScript本地连接到SQL Server 2005数据库?我正在台式机上学习Web编程。
还是我需要使用任何其他脚本语言?如果有其他建议,请提出一些建议,但我现在正尝试使用JavaScript。我的SQL Server是本地安装在桌面上的-SQL Server Management Studio 2005和IE7浏览器。
谁能给我一些示例源代码,以显示如何从JavaScript本地连接到SQL Server 2005数据库?我正在台式机上学习Web编程。
还是我需要使用任何其他脚本语言?如果有其他建议,请提出一些建议,但我现在正尝试使用JavaScript。我的SQL Server是本地安装在桌面上的-SQL Server Management Studio 2005和IE7浏览器。
Answers:
出于多种原因(不良做法,安全性问题等),您不应该使用客户端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原生的,因此实际制作起来会有些复杂。您必须通过发送和接收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
-请参阅 Integrated Security = True和Integrated Security = SSPI之间的区别
请注意,RecordCount会像-1
使用默认的adOpenForwardOnly类型一样返回。如果您使用较小的结果集和/或不介意一次存储全部内存,请使用rs.Open(strQuery, objConnection, 3);
(3 = adOpenStatic),这样可以得出一个有效的结果。rs.RecordCount
(很抱歉,这是有关SQL后端的更通用的答案-我尚未阅读有关SQL Server 2005的WebServices功能的答案。尽管此功能仍通过HTTP运行,而不是直接通过套接字运行,所以从本质上讲,它们已经建立小型Web服务器连接到数据库服务器,因此此答案仍然是您可以采取的另一种方法。)
您也可以直接使用套接字(Google“ javascript套接字”)进行连接,这时我的意思是为此目的使用Flash文件,尽管HTML5将Web套接字作为规范的一部分,我相信您可以做同样的事情。
有人引用了安全性问题,但是,如果您正确设计了数据库权限,从理论上讲,您应该能够从任何前端(包括OSQL)访问数据库,并且不会出现安全漏洞。那么,安全问题将在于您是否未通过SSL连接。
最后,尽管如此,我很确定这都是理论上的,因为我不相信有任何JavaScript库可用于处理SSL或SQL Server的通信协议,因此除非您愿意自己解决这些问题,否则最好在浏览器和数据库之间使用Web服务器和服务器端脚本语言。
我不认为您可以从客户端JavaScript连接到SQL Server。您需要选择一些服务器端语言来构建可与数据库交互的Web应用程序,并仅使用javascript来使您的用户界面更好地与之交互。
您可以根据自己的语言偏好选择任何服务器端脚本语言: