web-dev-qa-db-fra.com

Comment se connecter à la base de données SQL Server à partir de JavaScript dans le navigateur?

Quelqu'un peut-il me donner un exemple de code source montrant comment se connecter localement à une base de données SQL Server 2005 à partir de JavaScript? J'apprends la programmation Web sur mon bureau.

Ou dois-je utiliser un autre langage de script? Suggérez des alternatives si vous les avez, mais j'essaie maintenant de le faire avec JavaScript. Mon serveur SQL est installé localement sur mon bureau - SQL Server Management Studio 2005 et le navigateur IE7.

269
Enjoy coding

Vous ne devez pas utiliser le javascript du client pour accéder aux bases de données pour plusieurs raisons (mauvaise pratique, problèmes de sécurité, etc.), mais si vous voulez vraiment le faire, voici un exemple:

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; 

Un meilleur moyen de se connecter à un serveur SQL serait d'utiliser un langage côté serveur tel que PHP, Java, .NET, entre autres. Le code client javascript doit être utilisé uniquement pour les interfaces.

Et il y a des rumeurs d'une ancienne légende sur l'existence de javascript sur serveur, mais ceci est une autre histoire. ;)

666

Ce serait vraiment difficile à faire car le partage de votre chaîne de connexion ouvre votre site Web à tellement de vulnérabilités que vous ne pouvez pas simplement corriger, vous devez utiliser une méthode différente si vous voulez qu'il soit sécurisé. Sinon, vous vous ouvrez à un vaste public pour profiter de votre site.

25
allen walker

Un code de travail parfait ..

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

Services Web

SQL 2005+ prend en charge les WebServices natifs que vous pouvez presque utiliser bien que je ne le suggère pas, en raison des risques de sécurité auxquels vous pourriez être confrontés. Pourquoi ai-je dit presque . Bien, Javascript n'est pas SOAP natif, il serait donc un peu plus compliqué de le créer. Vous devez envoyer et recevoir SOAP via XmlHttpRequest. Consultez Google pour les clients Javascript SOAP.

10
Robert Koritnik

Jouer avec JavaScript dans un HTA Je n'ai pas eu de chance avec une chaîne de connexion driver={SQL Server};..., mais un DSN nommé était OK:
J'ai mis en place TestDSN et tout s'est bien déroulé, puis var strConn= "DSN=TestDSN"; a fonctionné. J'ai donc continué à expérimenter pour mes propres tests et apprentissages.

Notre serveur a plusieurs instances en cours d'exécution, par exemple. server1\dev et server1\Test , ce qui rendait les choses un peu plus délicates que J'ai réussi à perdre du temps à oublier d'échapper au \ en tant que \\ :)
Après quelques impasses avec server=server1;instanceName=dev dans les chaînes de connexion, j’ai finalement réussi à faire fonctionner celle-ci:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

En utilisant les informations d'identification Windows plutôt que de fournir un utilisateur/mot de passe, j'ai découvert une diversion intéressante: découvrir les subtilités de Integrated Security = true v Integrated Security = SSPI v Trusted_Connection=Yes - voir Différence entre la sécurité intégrée = True et sécurité intégrée = SSPI

Attention, RecordCount reviendra sous la forme -1 si vous utilisez le type par défaut adOpenForwardOnly . Si vous travaillez avec de petits ensembles de résultats et/ou ne vous occupez pas du tout en mémoire en une fois, utilisez rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic) et cela vous donnera un rs.RecordCount valide

5
AjV Jsy

Comme indiqué précédemment, l'utilisation de Javascript côté client ne devrait pas être effectuée, mais il existe un cadre pour implémenter ce que vous voulez de manière plus sécurisée.

Nodejs est un framework qui vous permet de coder les connexions de serveur en javascript. Consultez donc Nodejs et vous en apprendrez probablement un peu plus sur la communication avec des bases de données et la récupération des données dont vous avez besoin.

4
Shiri

(Désolé, c’était une réponse plus générique à propos des systèmes SQL - je n’avais pas lu la réponse à propos de la fonctionnalité WebServices de SQL Server 2005. Bien que cette fonctionnalité soit toujours exécutée sur HTTP plutôt que plus directement via des sockets, ils ont donc essentiellement construit un mini serveur Web dans le serveur de base de données, cette réponse est donc une autre voie à suivre.)

Vous pouvez également vous connecter directement à l'aide de sockets (google "sockets javascript"). J'entends par exemple utiliser un fichier Flash à cette fin, bien que HTML5 utilise Web Sockets dans ses spécifications, ce qui, je crois, vous permet de faire la même chose.

Certaines personnes citent des problèmes de sécurité, mais si vous avez correctement conçu vos autorisations de base de données, vous devriez théoriquement pouvoir accéder à la base de données à partir de n’importe quel serveur, y compris OSQL, sans faille de sécurité. Le problème de sécurité se poserait donc si vous ne vous connectiez pas via SSL.

Enfin, je suis presque sûr que tout cela est théorique, car je ne pense pas qu’il existe des bibliothèques JavaScript permettant de gérer les protocoles de communication pour SSL ou SQL Server. Par conséquent, à moins que vous ne vouliez comprendre ces choses vous-même, ce serait Il est préférable d’avoir un serveur Web et un langage de script côté serveur entre le navigateur et la base de données.

2
Kev

Je ne pense pas que vous puissiez vous connecter au serveur SQL à partir de javascripts côté client. Vous devez choisir un langage côté serveur pour créer des applications Web pouvant interagir avec votre base de données et utiliser javascript uniquement pour améliorer l'interface utilisateur de votre interface utilisateur.

vous pouvez choisir n'importe quel langage de script côté serveur en fonction de votre préférence de langue:

  • PHP
  • ASP.Net
  • Rubis sur rails
1
Vikram