278 votes

Comment se connecter à une 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 à une base de données SQL Server 2005 à partir de JavaScript en local ? J'apprends la programmation web sur mon ordinateur.

Ou dois-je utiliser un autre langage de script ? Suggérez des alternatives si vous en 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.

681voto

fbinder Points 5613

Vous ne devriez pas utiliser le javascript client pour accéder aux bases de données pour plusieurs raisons (mauvaises pratiques, 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; 

Une meilleure façon de se connecter à un serveur sql serait d'utiliser un langage côté serveur comme PHP, Java, .NET, entre autres. Le javascript du client ne devrait être utilisé que pour les interfaces.

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

24voto

allen walker Points 39

Ce n'est pas une bonne idée, car le fait de partager votre chaîne de connexion expose votre site Web à de nombreuses vulnérabilités que vous ne pouvez pas simplement corriger, vous devez utiliser une autre méthode si vous voulez qu'il soit sécurisé. Dans le cas contraire, vous ouvrez la porte à un vaste public qui pourra profiter de votre site.

11voto

Uthaiah Points 119

Un code de fonctionnement 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>

10voto

Robert Koritnik Points 45499

Services web

SQL 2005+ prend en charge les WebServices natifs que vous pourriez presque bien que je ne le recommande pas, en raison des risques de sécurité auxquels vous pouvez être confronté. Pourquoi ai-je dit presque . Javascript n'est pas natif de SOAP, il serait donc un peu plus compliqué de le réaliser. Il faudrait envoyer et recevoir SOAP par l'intermédiaire de XmlHttpRequest . Consultez Google pour trouver des clients SOAP en Javascript.

5voto

AjV Jsy Points 1551

En jouant avec JavaScript dans une HTA, je n'ai pas eu de chance avec une driver={SQL Server};... de connexion, mais un DSN nommé était OK :
J'ai mis en place TestDSN et il a testé OK, et ensuite var strConn= "DSN=TestDSN"; a fonctionné, j'ai donc continué à expérimenter pour mes propres besoins de test et d'apprentissage.

Notre serveur a plusieurs instances en cours d'exécution, par ex. Serveur 1 \dev y Serveur 1 \Test ce qui a rendu les choses un peu plus délicates car j'ai réussi à perdre du temps en oubliant d'échapper à la \ comme \\ :)
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 de Windows plutôt que de fournir un nom d'utilisateur et un mot de passe, j'ai trouvé une diversion intéressante en découvrant les subtilités de l'application Integrated Security = true v Integrated Security = SSPI v Trusted_Connection=Yes - voir Différence entre Sécurité intégrée = Vrai et Sécurité intégrée = SSPI

Attention, RecordCount reviendra en tant que -1 si vous utilisez l'option par défaut adOpenForwardOnly type. Si vous travaillez avec de petits ensembles de résultats et/ou si vous ne voulez pas que tout soit en mémoire en même temps, utilisez rs.Open(strQuery, objConnection, 3); (3=adOpenStatic) et cela donne un valide rs.RecordCount

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X