Dela via


Steg 3: Proof-of-Concept för anslutning till SQL med hjälp av Node.js

Ladda ned Node.js SQL-drivrutin

Det här exemplet bör endast betraktas som ett konceptbevis. Exempelkoden förenklas för tydlighetens skull och representerar inte nödvändigtvis metodtips som rekommenderas av Microsoft. Andra exempel som använder samma viktiga funktioner är tillgängliga på GitHub-exempellagringsplatsen.

Förutsättningar

Innan du kör exempelkoden kontrollerar du att följande krav är uppfyllda:

  • Node.js är installerat på utvecklingsdatorn. Ladda ned den från nodejs.org.
  • Det omständliga npm-paketet är installerat. Kör npm install tedious i projektkatalogen.
  • En SQL Server-instans är tillgänglig och konfigurerad för att acceptera anslutningar:
    • TCP/IP-protokollet är aktiverat i SQL Server Configuration Manager. TCP/IP är inaktiverat som standard i SQL Server Express-utgåvor.
    • SQL Server Browser-tjänsten körs om du ansluter till en namngiven instans.
    • Brandväggen tillåter anslutningar på SQL Server-porten (standard: 1433).
    • För SQL Server-autentisering aktiveras en SQL-inloggning och SQL Server har konfigurerats för autentisering i blandat läge.

Tips/Råd

Om du får ett anslutningsfel, till exempel Failed to connect, kontrollerar du att TCP/IP är aktiverat och att SQL Server-tjänsten körs. För lokal utveckling kan du prova att ansluta med server: 'localhost' eller server: '127.0.0.1'.

Steg 1: Anslut

Använd den nya anslutningsfunktionen för att ansluta till 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();

Steg 2: Kör en fråga

Kör alla SQL-instruktioner med hjälp av den nya funktionen Förfrågning . Om instruktionen returnerar rader, till exempel en select-instruktion, kan du hämta dem med funktionen request.on . Om det inte finns några rader returnerar funktionen request.on tomma listor.

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

Steg 3: Infoga en rad

I det här exemplet ser du hur du kör en INSERT-instruktion på ett säkert sätt och skickar parametrar som skyddar ditt program från SQL-inmatningsvärden .

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

Steg 4: Anslut med Windows-autentisering

Den omständliga drivrutinen stöder Windows-autentisering med NTLM. Om du vill ansluta med domänautentiseringsuppgifter i stället för SQL Server-autentisering ändrar du authentication avsnittet i anslutningskonfigurationen:

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

Anmärkning

NTLM-autentisering kräver att du anger domänautentiseringsuppgifter i konfigurationen. För betrodda anslutningar som använder den inloggade Windows-användaren utan att ange autentiseringsuppgifter bör du överväga msnodesqlv8-paketet , som använder den interna ODBC-drivrutinen.