Connect to Azure SQL DB from a Azure Functions in JS

这一生的挚爱 提交于 2021-02-19 06:00:29

问题


I am trying to connect to my Azure SQL DB from an azure function written in nodeJS. I have set the connection strings in the application settings and it still does not work. I used ODBC key for connection settings. Did anyone try this? Below is the sample code for my function

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

// Create connection to database
const config = process.env["sqldb_connection"];
var connection = new Connection(config);

// Attempt to connect and execute queries if connection goes through
connection.on('connect', function(err)
   {
     if (err)
       {
          console.log(err)
       }
    else
       {
           queryDatabase()
       }
   }
 );

function queryDatabase()
   { console.log('Reading rows from the Table...');

       // Read all rows from table
     request = new Request(
          "SELECT ORG_ID,ORG_NAME FROM org",
             function(err, rowCount, rows)
                {
                    console.log(rowCount + ' row(s) returned');
                    process.exit();
                }
            );

     request.on('row', function(columns) {
        columns.forEach(function(column) {
            console.log("%s\t%s", column.metadata.colName, column.value);
         });
             });
     connection.execSql(request);
   }

I am getting an error saying

Exception while executing function: Functions.HttpTriggerJS2. mscorlib: The given key was not present in the dictionary.

回答1:


  1. Run the npm install tedious command in the Kudu remote execution console under D:\home\site\wwwroot.

  2. In Azure Functions, all of your code should be put inside the module.exports function.

  3. You should use context.log() instead of console.log().

  4. You really don't have to set the connection settings string in Application settings of the function.

  5. You should inform the runtime when your code has finished by calling context.done().

The following code works for me:

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;

module.exports = function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');

    var config = {
        userName: '<userName>',
        password: '<password>',
        server: '<AzureSQLDBName>.database.windows.net',

        // If you're on Windows Azure, you will need this:
    options:
        {
                database: 'your DB',
                  encrypt: true
        }
};

    var connection = new Connection(config);

    connection.on('connect', function(err) {

        if (err) {
            context.log(err);

            context.res = {
                status: 500,
                body: "Unable to establish a connection."
            };
            context.done();

        } else {
            executeStatement();
        }
    });

    function executeStatement() {

        request = new Request("select 42, 'hello world'", function(err, rowCount) {
            if (err) {
                context.log(err);

                context.res = {
                    status: 500,
                    body: "Failed to connect to execute statement."
                };
                context.done();

            } else {
                context.log(rowCount + ' rows');
            }
        });

        request.on('row', function(columns) {
            columns.forEach(function(column) {
                context.log(column.value);
            });

            context.done();
        });

        connection.execSql(request);
    }
};

For more information, see Azure Functions JavaScript developer guide.



来源:https://stackoverflow.com/questions/48773289/connect-to-azure-sql-db-from-a-azure-functions-in-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!