Udostępnij przez


Krok 3. Weryfikacja koncepcji nawiązywania połączenia z bazą danych SQL przy użyciu Node.js

Pobieranie sterownika Node.js SQL

Ten przykład powinien być traktowany tylko jako dowód koncepcji. Przykładowy kod jest uproszczony w celu zapewnienia przejrzystości i niekoniecznie reprezentuje najlepsze rozwiązania zalecane przez firmę Microsoft. Inne przykłady, które używają tych samych kluczowych funkcji, są dostępne w repozytorium przykładowym GitHub.

Krok 1. Łączenie

Użyj nowej funkcji Połączenie , aby nawiązać połączenie z usługą SQL Database.

    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();

Krok 2. Wykonywanie zapytania

Wykonaj wszystkie instrukcje SQL przy użyciu nowej funkcji Request . Jeśli instrukcja zwraca wiersze, takie jak instrukcja select, można je pobrać przy użyciu funkcji request.on . Jeśli nie ma wierszy, funkcja request.on zwraca puste listy.

    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);  
    }  

Krok 3. Wstaw wiersz

W tym przykładzie zobaczysz, jak bezpiecznie wykonać instrukcję INSERT , przekazując parametry, które chronią aplikację przed wartościami iniekcji SQL .

    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);  
    }  

Krok 4. Nawiązywanie połączenia z uwierzytelnianiem systemu Windows

Żmudny sterownik obsługuje uwierzytelnianie systemu Windows przy użyciu protokołu NTLM. Aby nawiązać połączenie przy użyciu poświadczeń domeny zamiast uwierzytelniania programu SQL Server, zmień sekcję authentication w konfiguracji połączenia:

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();

Uwaga / Notatka

Uwierzytelnianie NTLM wymaga umieszczenia poświadczeń domeny w konfiguracji. W przypadku zaufanych połączeń korzystających z aktualnie zalogowanego użytkownika systemu Windows bez określania poświadczeń należy wziąć pod uwagę pakiet msnodesqlv8 , który używa natywnego sterownika ODBC.