Compartir a través de


Paso 3: Prueba de concepto de la conexión a SQL mediante Node.js

Descargar un controlador de SQL para Node.js

Solo debe considerarse a este ejemplo una prueba de concepto. El código de ejemplo se simplifica para mayor claridad y no representa necesariamente los procedimientos recomendados por Microsoft. Otros ejemplos, que usan las mismas funciones cruciales están disponibles en el repositorio de ejemplo de GitHub.

Paso 1: Conectar

Use la nueva función Connection para conectarse a 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();

Paso 2: Ejecutar una consulta

Ejecute todas las instrucciones SQL mediante la nueva función Request . Si la instrucción devuelve filas, como una instrucción select, puede recuperarlas mediante la función request.on . Si no hay filas, la función request.on devuelve listas vacías.

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

Paso 3: Inserción de una fila

En este ejemplo, puede ver cómo ejecutar una instrucción INSERT de forma segura, pasando parámetros, que protege tu aplicación de los valores de inyección 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);  
    }  

Paso 4: Conexión con la autenticación de Windows

El controlador tedioso admite la autenticación de Windows mediante NTLM. Para conectarse con credenciales de dominio en lugar de la autenticación de SQL Server, cambie la authentication sección de la configuración de conexión:

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

Nota:

La autenticación NTLM requiere que proporcione credenciales de dominio en la configuración. Para las conexiones de confianza que usan el usuario de Windows que ha iniciado sesión actualmente sin especificar credenciales, considere el paquete msnodesqlv8 , que usa el controlador ODBC nativo.