Wie kann ich über JavaScript im Browser eine Verbindung zur SQL Server-Datenbank herstellen?

285

Kann mir jemand einen Beispielquellcode geben, der zeigt, wie eine lokale Verbindung zu einer SQL Server 2005-Datenbank über JavaScript hergestellt wird? Ich lerne Webprogrammierung auf meinem Desktop.

Oder muss ich eine andere Skriptsprache verwenden? Schlagen Sie einige Alternativen vor, wenn Sie sie haben, aber ich versuche jetzt, dies mit JavaScript zu tun. Mein SQL Server ist lokal auf meinem Desktop installiert - SQL Server Management Studio 2005 und IE7-Browser.

Viel Spaß beim Codieren
quelle
16
Es wird definitiv nicht empfohlen, dies zu tun, aber es ist schön zu sehen, welche Antworten daraus entstehen können.
TheTXI
2
Ich möchte eine Verbindung zu einer Datenbank von Node.JS (Implementierung von serverseitigem Javascript) herstellen und bin hier angekommen. Weiß jemand, wohin ich dafür gehen soll?
Roy Tinker
2
@ RoyTinker: Es gibt Node-Postgres und Node-MySQL.
Janus Troelsen
1
Gibt es tatsächlich eine kostenlose Datenbank, die Sie verwenden können?
1
Sie können ein REST-Backend mit Node.js und JavaScript schreiben und es mit Ihrem clientseitigen JavaScript verbinden.
Fez Vrasta

Antworten:

701

Sie sollten aus verschiedenen Gründen (schlechte Praxis, Sicherheitsprobleme usw.) kein Client-Javascript verwenden, um auf Datenbanken zuzugreifen. Wenn Sie dies jedoch wirklich tun möchten, finden Sie hier ein Beispiel:

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; 

Eine bessere Möglichkeit, eine Verbindung zu einem SQL Server herzustellen, besteht darin, eine serverseitige Sprache wie PHP, Java, .NET usw. zu verwenden. Client-Javascript sollte nur für die Schnittstellen verwendet werden.

Und es gibt Gerüchte über eine alte Legende über die Existenz von Server-Javascript, aber dies ist eine andere Geschichte. ;)

Fabio Vinicius Binder
quelle
323
Herzlichen Glückwunsch, dass Sie so ziemlich die einzige Person hier sind, die tatsächlich zeigt, dass dies möglich ist (obwohl dies nicht empfohlen wird).
TheTXI
6
Während dies bei der Einrichtung des OP funktionieren könnte - er sagte, er wollte "Webprogrammierung" lernen - und Internet Explorer in einer Umgebung mit geringer Sicherheit ist keine Webprogrammierung.
Quentin
27
Ich verstehe nicht, warum dieser Kommentar als negative Abstimmung qualifiziert ist. Ich erkläre, wie es geht, sage ihm aber, er soll es nicht benutzen.
Fabio Vinicius Binder
26
fbinder: Einige Leute werden dies ablehnen, weil sie denken, dass jeder Versuch, eine Datenbankverbindung herzustellen und JavaScript abzufragen, ein großes Nein-Nein ist (obwohl Sie das ziemlich deutlich sagen). Wenn ich Sie wäre, hätte ich nichts gegen die ein oder zwei negativen Stimmen, die Sie dazu erhalten, und genieße einfach die zahlreichen positiven Stimmen, die es erhalten wird, da dies die einzige Antwort ist, die die gestellte Frage tatsächlich beantwortet.
TheTXI
36
Es sollte jedoch wahrscheinlich beachtet werden, dass diese Antwort aufgrund der Verwendung von ActiveX wahrscheinlich nicht für Nicht-IE-Browser funktioniert (obwohl das Originalposter explizit über seine Verwendung von IE war).
TheTXI
25

Dies wäre sehr schlecht, da das Teilen Ihrer Verbindungszeichenfolge Ihre Website für so viele Sicherheitslücken öffnet, dass Sie sie nicht einfach reparieren können. Sie müssen eine andere Methode verwenden, wenn Sie möchten, dass sie sicher ist. Andernfalls öffnen Sie sich einem großen Publikum, um Ihre Website zu nutzen.

Allen Walker
quelle
7
Upvote, weil Sie tatsächlich erklärt haben, warum es eine schlechte Idee ist
Reversed Engineer
Sicherheitstipps
nützlicher
9
Abwahl, weil das OP nicht gefragt hat, ob es eine gute oder eine schlechte Praxis ist, sie haben gefragt, wie. Sie können in eine tatsächliche ANTWORT einfügen, warum es eine schlechte Idee sein kann, aber nur zu sagen, dass es eine schlechte Idee ist, verdient keine eigene Antwort, es ist bestenfalls ein Kommentar.
Wobbles
1
Was ist, wenn Sie nur etwas hinter eine sichere Firewall schreiben, um eine Schnittstelle mit einem lokalen Server herzustellen? Ist dies immer noch schlecht?
Bryan Bryce
Korrigieren Sie mich, wenn ich falsch liege, aber wenn der angegebene Benutzer schreibgeschützt ist und Sie verwalten, auf welche Tabellen er zugreifen kann, ist dies technisch sicher, bis sich etwas ändert, nicht wahr? Ich würde es auch nicht empfehlen, es sei denn, die gesamte Datenbank enthält nicht vertrauliche Informationen. Könnte vertrauliche Informationen in eine andere Datenbank einfügen. Ich kann mir vorstellen, dass dies für eine statische Website ohne vertrauliche Informationen nützlich ist. Wenn Sie eine Authentifizierung benötigen, können Sie oautj2 async auf einem anderen Server verwenden.
Joe Flack
11

Ein perfekter Arbeitscode ..

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

Internetdienste

SQL 2005+ unterstützt native WebServices, die Sie fast verwenden könnten , obwohl ich dies aufgrund von Sicherheitsrisiken nicht empfehlen würde. Warum habe ich fast gesagt . Nun, Javascript ist nicht SOAP-nativ, daher wäre es etwas komplizierter, es tatsächlich zu erstellen. Sie müssten SOAP über senden und empfangen XmlHttpRequest. Suchen Sie in Google nach Javascript SOAP-Clients.

Robert Koritnik
quelle
5

Spielen mit JavaScript in einem HTA Ich hatte kein Glück mit einer driver={SQL Server};...Verbindungszeichenfolge, aber ein benannter DSN war in Ordnung:
Ich habe TestDSN eingerichtet und es wurde in Ordnung getestet und dann var strConn= "DSN=TestDSN";funktioniert, also habe ich für meine internen Test- und Lernzwecke weiter experimentiert.

Auf unserem Server laufen mehrere Instanzen, z. B. server1 \ dev und server1 \ Test, was die Sache etwas schwieriger machte, da ich einige Zeit damit verschwenden musste, zu vergessen, dem \as zu entkommen \\:)
Nach einigen Sackgassen server=server1;instanceName=devin den Verbindungszeichenfolgen bekam ich diese schließlich eine zu arbeiten:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

Bei Verwendung von Windows-Anmeldeinformationen anstelle der Angabe eines Benutzers / pwd stellte ich fest, dass eine interessante Ablenkung darin bestand, die Feinheiten von Integrated Security = truev Integrated Security = SSPIv zu entdecken Trusted_Connection=Yes- siehe Unterschied zwischen integrierter Sicherheit = True und integrierter Sicherheit = SSPI

Beachten Sie, dass RecordCount so zurückkehrt, als -1würde der Standardtyp adOpenForwardOnly verwendet. Wenn Sie mit kleinen Ergebnismengen arbeiten und / oder nicht die gesamte Menge auf einmal im Speicher haben, verwenden Sie rs.Open(strQuery, objConnection, 3); (3 = adOpenStatic) und dies ergibt eine gültigers.RecordCount

AjV Jsy
quelle
4

Wie bereits erwähnt, sollte dies nicht mit clientseitigem Javascript erfolgen, es gibt jedoch ein Framework, um das, was Sie möchten, sicherer zu implementieren.

Nodejs ist ein Framework, mit dem Sie Serververbindungen in Javascript codieren können. Schauen Sie sich also Nodejs an und erfahren Sie wahrscheinlich mehr über die Kommunikation mit Datenbanken und das Abrufen der benötigten Daten.

Shiri
quelle
3

(Entschuldigung, dies war eine allgemeinere Antwort zu SQL-Backends. Ich hatte die Antwort zu der WebServices-Funktion von SQL Server 2005 nicht gelesen. Obwohl diese Funktion immer noch über HTTP und nicht direkt über Sockets ausgeführt wird, wurden sie im Wesentlichen erstellt ein Mini-Webserver in den Datenbankserver, daher ist diese Antwort noch ein anderer Weg, den Sie einschlagen könnten.)

Sie können auch eine direkte Verbindung über Sockets (Google "Javascript-Sockets") herstellen. Mit direkt an dieser Stelle meine ich die Verwendung einer Flash-Datei für diesen Zweck, obwohl HTML5 Web-Sockets als Teil der Spezifikation enthält, von der ich glaube, dass Sie dasselbe tun können.

Einige Leute führen Sicherheitsprobleme an, aber wenn Sie Ihre Datenbankberechtigungen korrekt entworfen haben, sollten Sie theoretisch von jedem Front-End, einschließlich OSQL, auf die Datenbank zugreifen können und keine Sicherheitsverletzung haben. Das Sicherheitsproblem wäre dann, wenn Sie keine Verbindung über SSL herstellen würden.

Schließlich bin ich mir jedoch ziemlich sicher, dass dies alles theoretisch ist, da ich nicht glaube, dass JavaScript-Bibliotheken für die Verarbeitung der Kommunikationsprotokolle für SSL oder SQL Server existieren. Wenn Sie also nicht bereit sind, diese Dinge selbst herauszufinden, wäre dies der Fall Es ist besser, einen Webserver und eine serverseitige Skriptsprache zwischen dem Browser und der Datenbank zu verwenden.

Kev
quelle
2
Gut gesagt. Es ist nichts Falsches daran, direkt von einem Client (dh jedem jemals erstellten Thick Client) auf eine Datenbank zuzugreifen und nicht über einen Webdienst. Wenn Sie Windows-Authentifizierung und eine gute Sicherheitsschicht verwenden, ist daran nichts auszusetzen
Nick.McDermaid
1

Ich glaube nicht, dass Sie über clientseitige Javascripts eine Verbindung zum SQL Server herstellen können. Sie müssen eine serverseitige Sprache verwenden, um Webanwendungen zu erstellen, die mit Ihrer Datenbank interagieren können, und nur Javascript verwenden, um die Interaktion mit Ihrer Benutzeroberfläche zu verbessern.

Sie können jede serverseitige Skriptsprache basierend auf Ihren Spracheinstellungen auswählen:

  • PHP
  • ASP.Net
  • Ruby On Rails
Vikram
quelle
1
Dies war eine der einzig wahren Antworten, die ich finden konnte. Welche ASP.net-Optionen sollte ich untersuchen? Was brauche ich zusätzlich zu den Microsoft-Treibern noch?
Rachael
Sie könnten möglicherweise ADO.Net oder Entity Framework / LinqToSql verwenden - eines davon tatsächlich.
Vikram