3. lépés: Megvalósíthatósági igazolása az SQL-hez való csatlakozásnak Node.js használatával

Node.js SQL-illesztőprogram letöltése

Ezt a példát csak a koncepció bizonyítékának kell tekinteni. A mintakód egyszerűbb az egyértelműség kedvéért, és nem feltétlenül a Microsoft által ajánlott ajánlott eljárásokat jelöli. A GitHub-mintaadattárban további példák is elérhetők, amelyek ugyanazokat a kulcsfontosságú függvényeket használják.

Előfeltételek

A mintakód futtatása előtt győződjön meg arról, hogy a következő előfeltételek teljesülnek:

  • Node.js telepítve van a fejlesztői gépen. Töltse le a nodejs.org-ról.
  • A fárasztó npm-csomag telepítve van. Futtassa a npm install tedious a projektkönyvtárban.
  • Elérhető és konfigurált SQL Server-példány a kapcsolatok elfogadására:
    • A TCP/IP protokoll engedélyezve van az SQL Server Configuration Managerben. A TCP/IP alapértelmezés szerint le van tiltva az SQL Server Express-kiadásokban.
    • Az SQL Server Browser szolgáltatás akkor fut, ha névvel ellátott példányhoz csatlakozik.
    • A tűzfal engedélyezi a kapcsolatokat az SQL Server-porton (alapértelmezett: 1433).
    • Az SQL Server-hitelesítéshez engedélyezve van az SQL-bejelentkezés, és az SQL Server vegyes módú hitelesítésre van konfigurálva.

Jótanács

Ha például Failed to connectcsatlakozási hibát kap, ellenőrizze, hogy engedélyezve van-e a TCP/IP, és fut-e az SQL Server szolgáltatás. Helyi fejlesztéshez próbáljon meg csatlakozni a következőhöz server: 'localhost' : vagy server: '127.0.0.1'.

1. lépés: Csatlakozás

Az új Kapcsolat függvény használatával csatlakozzon az SQL Database-hez.

    var Connection = require('tedious').Connection;  
    var config = {  
        server: 'your_server.database.windows.net',  //update me
        authentication: {
            type: 'default',
            options: {
                userName: 'your_username', //update me
                password: 'your_password'  //update me
            }
        },
        options: {
            // If you're on Microsoft Azure, you need encryption:
            encrypt: true,
            database: 'your_database'  //update me
        }
    };  
    var connection = new Connection(config);  
    connection.on('connect', function(err) {  
        // If no error, then good to proceed.
        console.log("Connected");  
    });
    
    connection.connect();

2. lépés: Lekérdezés végrehajtása

Hajtsa végre az összes SQL-utasítást az új Request függvénnyel. Ha az utasítás sorokat ad vissza, például egy választó utasítást, lekérheti őket a request.on függvénnyel. Ha nincsenek sorok, a request.on függvény üres listákat ad vissza.

    var Connection = require('tedious').Connection;  
    var config = {  
        server: 'your_server.database.windows.net',  //update me
        authentication: {
            type: 'default',
            options: {
                userName: 'your_username', //update me
                password: 'your_password'  //update me
            }
        },
        options: {
            // If you're on Microsoft Azure, you need encryption:
            encrypt: true,
            database: 'your_database'  //update me
        }
    }; 
    var connection = new Connection(config);  
    connection.on('connect', function(err) {  
        // If no error, then good to proceed.  
        console.log("Connected");  
        executeStatement();  
    });  
    
    connection.connect();
  
    var Request = require('tedious').Request;  
    var TYPES = require('tedious').TYPES;  
  
    function executeStatement() {  
        var request = new Request("SELECT c.CustomerID, c.CompanyName,COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC;", function(err) {  
        if (err) {  
            console.log(err);}  
        });  
        var result = "";  
        request.on('row', function(columns) {  
            columns.forEach(function(column) {  
              if (column.value === null) {  
                console.log('NULL');  
              } else {  
                result+= column.value + " ";  
              }  
            });  
            console.log(result);  
            result ="";  
        });  
  
        request.on('done', function(rowCount, more) {  
        console.log(rowCount + ' rows returned');  
        });  
        
        // Close the connection after the final event emitted by the request, after the callback passes
        request.on("requestCompleted", function (rowCount, more) {
            connection.close();
        });
        connection.execSql(request);  
    }  

3. lépés: Sor beszúrása

Ebben a példában azt látja, hogyan hajthat végre biztonságosan egy INSERT utasítást olyan paraméterek átadásával, amelyek megvédik az alkalmazást az SQL-injektálási értékektől.

    var Connection = require('tedious').Connection;  
    var config = {  
        server: 'your_server.database.windows.net',  //update me
        authentication: {
            type: 'default',
            options: {
                userName: 'your_username', //update me
                password: 'your_password'  //update me
            }
        },
        options: {
            // If you're on Microsoft Azure, you need encryption:
            encrypt: true,
            database: 'your_database'  //update me
        }
    };  
    var connection = new Connection(config);  
    connection.on('connect', function(err) {  
        // If no error, then good to proceed.  
        console.log("Connected");  
        executeStatement1();  
    });
    
    connection.connect();
    
    var Request = require('tedious').Request  
    var TYPES = require('tedious').TYPES;  
  
    function executeStatement1() {  
        var request = new Request("INSERT SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate) OUTPUT INSERTED.ProductID VALUES (@Name, @Number, @Cost, @Price, CURRENT_TIMESTAMP);", function(err) {  
         if (err) {  
            console.log(err);}  
        });  
        request.addParameter('Name', TYPES.NVarChar,'SQL Server Express 2014');  
        request.addParameter('Number', TYPES.NVarChar , 'SQLEXPRESS2014');  
        request.addParameter('Cost', TYPES.Int, 11);  
        request.addParameter('Price', TYPES.Int,11);  
        request.on('row', function(columns) {  
            columns.forEach(function(column) {  
              if (column.value === null) {  
                console.log('NULL');  
              } else {  
                console.log("Product id of inserted item is " + column.value);  
              }  
            });  
        });

        // Close the connection after the final event emitted by the request, after the callback passes
        request.on("requestCompleted", function (rowCount, more) {
            connection.close();
        });
        connection.execSql(request);  
    }  

4. lépés: Csatlakozás Windows-hitelesítéssel

A unalmas illesztőprogram támogatja a Windows-hitelesítést az NTLM használatával. Ha az SQL Server-hitelesítés helyett tartományi hitelesítő adatokkal szeretne csatlakozni, módosítsa a authentication kapcsolatkonfiguráció szakaszát:

var Connection = require('tedious').Connection;
var config = {
    server: '<server>',  //update me
    authentication: {
        type: 'ntlm',
        options: {
            domain: '<domain>',    //update me
            userName: '<username>', //update me
            password: '<password>'  //update me
        }
    },
    options: {
        encrypt: false,
        database: '<database>',  //update me
        port: 1433
    }
};
var connection = new Connection(config);
connection.on('connect', function(err) {
    if (err) {
        console.log('Connection failed', err);
    } else {
        console.log('Connected with Windows authentication');
    }
});

connection.connect();

Megjegyzés:

Az NTLM-hitelesítéshez tartományi hitelesítő adatokat kell megadnia a konfigurációban. Azoknak a megbízható kapcsolatoknak, amelyek a jelenleg bejelentkezett Windows-felhasználót használják hitelesítő adatok megadása nélkül, fontolja meg az msnodesqlv8 csomagot, amely a natív ODBC-illesztőprogramot használja.