Подключение к базе данных SQL Azure с помощью Функций Azure

В этой статье показано, как с помощью Функций Azure создать запланированное задание, которое подключается к экземпляру Базы данных SQL Azure или Управляемому экземпляру SQL Azure. Код функции очищает строки в таблице базы данных. Новая функция C# создается на основе стандартного шаблона триггера по таймеру в Visual Studio 2019. Для выполнения этого сценария необходимо также задать строку подключения к базе данных как параметр приложений в приложении-функции. В случае Управляемого экземпляра SQL Azure необходимо включить общедоступную конечную точку, чтобы иметь возможность подключения из Функций Azure. В этом сценарии к базе данных применяется массовая операция.

Если вы впервые работаете с Функциями C#, обратитесь к статье Справочник разработчика C# по функциям Azure.

Предварительные требования

Получение сведений о подключении

Необходимо получить строку подключения к базе данных, созданной при выполнении инструкций в статье "Краткое руководство. Создание отдельной базы данных в Базе данных SQL Azure".

  1. Войдите на портал Azure.

  2. В меню слева выберите пункт Базы данных SQL и на странице Базы данных SQL выберите имя своей базы данных.

  3. Щелкните Строки подключения в разделе Параметры и полностью скопируйте строку подключения ADO.NET. В случае Управляемого экземпляра SQL Azure скопируйте строку подключения для общедоступной конечной точки.

    Скопируйте строку подключения ADO.NET.

Задание строки подключения

Выполнение функций в Azure происходит в рамках приложений-функций. В целях безопасности рекомендуется хранить строки подключения и другие секретные данные в параметрах приложения-функции. Использование параметров приложения позволяет предотвратить случайное раскрытие строки подключения в коде. Доступ к параметрам приложения-функции можно получить прямо из Visual Studio.

Вы должны были ранее опубликовать свое приложение в Azure. Если вы еще этого не сделали, выполните инструкции, приведенные в разделе Публикация в Azure.

  1. В Обозревателе решений щелкните правой кнопкой проект и выберите пункт Опубликовать.

  2. На странице Опубликовать выберите многоточие (...) в области Размещения и выберите Управление параметрами службы приложений Azure.

    Управление параметрами Служба приложений для приложения-функции.

  3. В Параметрах приложения выберите Добавить параметр, а затем в окне Имя нового параметра приложения введите sqldb_connection и щелкните OK.

    Добавьте параметр приложения-функции.

  4. В новом параметре sqldb_connection вставьте строку подключения, скопированную в предыдущем разделе, в поле Локальный и замените заполнители {your_username} и {your_password} настоящими значениями. Щелкните Вставка локального значения, чтобы скопировать обновленное значение в поле Удаленный, а затем нажмите кнопку ОК.

    Параметр добавления строки подключения SQL.

    Строки подключения хранятся в зашифрованном виде в Azure (Удаленный). Чтобы предотвратить утечку секретов, файл проекта local.settings.json (Локальный) должен быть исключен из системы управления версиями, например, с помощью файла GITIGNORE.

Добавление пакета SqlClient в проект

Вам необходимо добавить пакет NuGet, содержащий библиотеку SqlClient. Эта библиотека доступа к данным требуется для подключения к Базе данных SQL.

  1. Откройте проект локального приложения-функции в Visual Studio 2022.

  2. В обозревателе решений щелкните правой кнопкой мыши проект приложения-функции и выберите Управление пакетами NuGet.

  3. Перейдите на вкладку Обзор, выполните поиск по запросу Microsoft.Data.SqlClient и выберите его по завершении поиска.

  4. На странице Microsoft.Data.SqlClient выберите версию 5.1.0 и нажмите кнопку Установить.

  5. После завершения установки просмотрите изменения, а затем нажмите кнопку ОК, чтобы закрыть окно предварительного просмотра.

  6. Если откроется окно Прием условий лицензионного соглашения, щелкните Я принимаю.

Теперь можно добавить код функции C#, который подключается к базе данных SQL.

Добавление функции, активируемой с помощью таймера

  1. В обозревателе решений щелкните правой кнопкой мыши проект приложения-функции и выберите Добавить>Новая функция Azure.

  2. Выбрав шаблон Функции Azure, назовите новый элемент, например DatabaseCleanup.cs, и выберите Добавить.

  3. В диалоговом окне Новая функция Azure выберите Триггер таймера, а затем нажмите кнопку Добавить. В этом диалоговом окне создается файл кода для функции, активируемой по таймеру.

  4. Откройте новый файл кода и добавьте в начало файла следующие операторы using:

    using Microsoft.Data.SqlClient;
    using System.Threading.Tasks;
    
  5. Замените имеющуюся функцию Run следующим кодом:

    [FunctionName("DatabaseCleanup")]
    public static async Task Run([TimerTrigger("*/15 * * * * *")]TimerInfo myTimer, ILogger log)
    {
        // Get the connection string from app settings and use it to create a connection.
        var str = Environment.GetEnvironmentVariable("sqldb_connection");
        using (SqlConnection conn = new SqlConnection(str))
        {
            conn.Open();
            var text = "UPDATE SalesLT.SalesOrderHeader " +
                    "SET [Status] = 5  WHERE ShipDate < GetDate();";
    
            using (SqlCommand cmd = new SqlCommand(text, conn))
            {
                // Execute the command and log the # rows affected.
                var rows = await cmd.ExecuteNonQueryAsync();
                log.LogInformation($"{rows} rows were updated");
            }
        }
    }
    

    Эта функция выполняется каждые 15 секунд, чтобы обновить столбец Status на основе даты отправки. Дополнительные сведения о триггере таймера см. в статье Триггеры таймера для службы "Функции Azure".

  6. Нажмите клавишу F5 для запуска приложения-функции. Позади Visual Studio откроется окно выполнения Azure Functions Core Tools.

  7. Через 15 секунд после запуска функция начнет выполняться. Просмотрите выходные данные и запишите число строк, обновленных в таблице SalesOrderHeader.

    Просмотрите журналы функции.

    При первом выполнении необходимо обновить 32 строки данных. Следующие запуски не будут обновлять строки данных, если вы не внесете изменения в данные таблицы SalesOrderHeader, чтобы оператор UPDATE выбрал больше строк.

Если вы планируете опубликовать эту функцию, не забудьте указать для атрибута TimerTrigger другое расписание в формате выражения Cron (выполнение каждые 15 секунд). Кроме того, необходимо убедиться, что приложение-функция может получить доступ к базе данных Azure SQL или Управляемый экземпляр SQL Azure. Дополнительные сведения см. по одной из следующих ссылок в зависимости от типа Azure SQL:

Дальнейшие действия

Узнайте, как использовать Функции с Logic Apps для интеграции с другими службами.

Дополнительные сведения о Функциях см. в следующих статьях: