Hoe verbinding maken met de SQL Server-database vanuit JavaScript in de browser?

Kan iemand me een voorbeeldbroncode geven die laat zien hoe ik lokaal verbinding kan maken met een SQL Server 2005-database vanuit JavaScript? Ik leer webprogrammeren op mijn desktop.

Of moet ik een andere scripttaal gebruiken? Stel enkele alternatieven voor als je die hebt, maar ik probeer het nu met JavaScript te doen. Mijn SQL Server is lokaal geïnstalleerd op mijn bureaublad – SQL Server Management Studio 2005 en IE7-browser.


Antwoord 1, autoriteit 100%

U moet om verschillende redenen (slechte praktijken, beveiligingsproblemen, enz.) geen client-javascript gebruiken om toegang te krijgen tot databases, maar als u dit echt wilt doen, volgt hier een voorbeeld:

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; 

Een betere manier om verbinding te maken met een sql-server zou zijn om een server-side taal te gebruiken, zoals onder andere PHP, Java, .NET. Client javascript mag alleen worden gebruikt voor de interfaces.

En er gaan geruchten over een oude legende over het bestaan van server-javascript, maar dit is een ander verhaal. 😉


Antwoord 2, autoriteit 4%

Dit zou heel slecht zijn om te doen, omdat het delen van je verbindingsreeks je website blootstelt aan zoveel kwetsbaarheden die je niet zomaar kunt oplossen, je moet een andere methode gebruiken als je wilt dat het veilig is. Anders stel je je open voor een enorm publiek om te profiteren van je site.


Antwoord 3, autoriteit 2%

Een perfect werkende code..

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

Antwoord 4

Webservices

SQL 2005+ ondersteunt native WebServices die u bijnazou kunnen gebruiken, hoewel ik het niet zou aanraden, vanwege veiligheidsrisico’s waarmee u te maken kunt krijgen. Waarom zei ik bijna. Nou, Javascript is niet SOAP-native, dus het zou een beetje ingewikkelder zijn om het daadwerkelijk te maken. U moet SOAP verzenden en ontvangen via XmlHttpRequest. Controleer google op Javascript SOAP-clients.


Antwoord 5

Spelen met JavaScript in een HTA Ik had geen geluk met een driver={SQL Server};...verbindingsstring, maar een naam DSN was OK:
Ik heb Testdsn ingesteld en het testte OK, en vervolgens var strConn= "DSN=TestDSN";werkte, dus ik droeg experimenteren voor mijn interne test- en leerdoeleinden .

Onze server heeft verschillende instanties die draaien, b.v. Server1 \ Dev en Server1 \ Test die dingen iets lastig maakten, omdat ik een tijdje kan verspillen vergeten om te ontsnappen aan de \als \\🙂
Na enkele dode-ends met server=server1;instanceName=devIn de aansluitsnaren kreeg ik uiteindelijk deze aan het werk:
var strConn= "Provider=SQLOLEDB;Data Source=server1\\dev;Trusted_Connection=Yes;Initial Catalog=MyDatabase;"

Gebruikte Windows-inloggegevens in plaats van een gebruiker / pwd te leveren, vond ik een interessante afleiding aan het ontdekken van de subtiliteiten van Integrated Security = trueV Integrated Security = SSPIV Trusted_Connection=Yes– Zie verschil tussen geïntegreerde beveiliging = True en geïntegreerde beveiliging = SSPI

Pas op dat Recordcount terugkomt als -1als het gebruik van de standaard AODUSWARDONLY type. Als u met kleine resultaatets werkt en / of niet in het geheugen in geheugen in het geheugen wilt, gebruikt u rs.Open(strQuery, objConnection, 3);(3 = Adoptatic ) en dit geeft een geldige rs.RecordCount


Antwoord 6

(Sorry, dit was een meer generiek antwoord over SQL Backdends – ik had het antwoord niet gelezen over SQL Server 2005-webservices-functie. Hoewel, deze functie nog steeds over HTTP wordt uitgevoerd in plaats van rechtstreeks via sockets, dus in wezen ‘VE HEEFT EEN MINI-webserver ingebouwd in de databaseserver, dus dit antwoord is nog een andere route die u zou kunnen nemen.)

U kunt ook rechtstreeks verbinding maken met sockets (Google “JavaScript-aansluitingen”) en direct op dit punt bedoel ik met behulp van een Flash-bestand voor dit doel, hoewel HTML5 websamenden heeft als onderdeel van de specificatie die ik geloof hetzelfde.

Sommige mensen noemen beveiligingskwesties, maar als u uw database-machtigingen correct heeft ontworpen, moet u theoretisch toegang hebben tot de database vanaf elke voorkant, inclusief OSQL, en geen beveiligingsbreuk heeft. Het beveiligingsprobleem zou dan zijn als u zich via SSL niet verbonden was.

Ten slotte, ik ben echter vrij zeker van dat dit allemaal theoretisch is omdat ik niet geloof dat JavaScript-bibliotheken bestaan ​​voor het afhandelen van de communicatieprotocollen voor SSL of SQL Server, dus tenzij u deze dingen zelf wilt weten ‘D is beter om de route te gaan van het hebben van een webserver en scriptaal met server tussen de browser en de database.


Antwoord 7

Zoals vermeld voordat het niet moet worden gedaan met behulp van JavaScript van de client, maar er is een raamwerk voor de implementatie van wat u veiliger wilt.

NODEJS is een raamwerk waarmee u serververbindingen in JavaScript kunt coderen, dus kijk eens naar NODEJS en u zult waarschijnlijk een beetje meer leren over communiceren met databases en het grijpen van gegevens die u nodig hebt.


Antwoord 8

Ik denk niet dat je vanuit client-side javascripts verbinding kunt maken met de SQL-server. Je moet wat server-side taal oppikken om webapplicaties te bouwen die kunnen communiceren met je database en alleen javascript gebruiken om je gebruikersinterface beter te laten werken.

u kunt elke server-side scripttaal oppikken op basis van uw taalvoorkeur:

  • PHP
  • ASP.Net
  • Ruby op rails

Other episodes