使用 Azure Functions 連接到 Azure SQL Database
本文示範如何使用 Azure Functions 建立可連線至 Azure SQL Database 或 Azure SQL 受控執行個體的排程作業。 函式程式碼會清除資料庫中資料表中的資料列。 新的 C# 函式是根據 Visual Studio 2019 中預先定義的計時器觸發範本所建立。 若要支援此案例,您也必須在函式應用程式中設定資料庫連接字串以作為設定。 針對 Azure SQL 受控執行個體,您必須啟用公用端點,才能從 Azure Functions 連線。 此案例會對資料庫使用大量作業。
如果這是您第一次使用 C# Functions,則您應該先閱讀 Azure Functions C# 開發人員參考資料。
必要條件
完成使用 Visual Studio 建立第一個函式一文中的步驟,建立一個以 2.x 或執行階段更新版本為目標的本地函數應用程式。 您還必須已將專案發佈至 Azure 中的函數應用程式。
本文章將示範在 AdventureWorksLT 範例資料庫的 SalesOrderHeader 資料表中執行大量清除作業的 Transact-SQL 命令。 若要建立 AdventureWorksLT 範例資料庫,請完成使用 Azure 入口網站在 Azure SQL 資料庫中建立資料庫一文中的步驟。
在此快速入門中,您必須加入您所使用電腦的公用 IP 位址伺服器層級防火牆規則。 需要此規則才能從本地電腦存取 SQL Database 執行個體。
取得連線資訊
完成使用 Azure 入口網站在 Azure SQL 資料庫中建立資料庫時,您必須取得所建立資料庫的連接字串。
登入 Azure 入口網站。
從左側功能表中選取 [SQL Database],然後選取 [SQL 資料庫] 頁面上的資料庫。
選取 [設定] 下的 [連接字串],然後複製完整的 ADO.NET 連接字串。 針對 Azure SQL 受控執行個體複製公用端點的連接字串。
設定連接字串
函式應用程式可在 Azure 中主控函式的執行。 在函數應用程式設定中儲存連接字串和其他機密資料是最佳安全性做法。 使用應用程式設定可避免意外洩露連接字串與您的程式碼。 您可以直接從 Visual Studio 存取函數應用程式的應用程式設定。
您必須先將應用程式發佈至 Azure。 如果您尚未這麼做,請將您的函式應用程式發行至 Azure。
在 [方案總管] 中以滑鼠右鍵按一下函數應用程式專案,並選擇 [發佈]。
在 [發佈] 頁面的 [裝載] 區域中選取省略號 (
...
),然後選擇 [管理 Azure App 服務設定]。在 [應用程式設定] 中選取 [新增設定],在 [新增應用程式設定名稱] 中輸入
sqldb_connection
,然後選取 [確定]。在新的 sqldb_connection 設定中,在 Local 欄位中貼上您在上一節中複製的連接字串,並將
{your_username}
和{your_password}
預留位置取代為實際的值。 選取 [從本機插入值],將更新的值複製到 Remote 欄位中,然後選取 [確定]。連接字串會以加密方式儲存在 Azure 中 (Remote)。 若要避免遺漏祕密,應從原始檔控制中排除 local.settings.json 專案檔 (Local),例如使用 .gitignore 檔案。
將 SqlClient 套件加入專案
您需要新增包含 SqlClient 程式庫的 NuGet 套件。 連接到 SQL Database 需要此資料存取程式庫。
在 Visual Studio 2022 中,開啟您的本地函數應用程式專案。
在 [方案總管] 中,於函數應用程式上按一下滑鼠右鍵,然後選擇 [管理 NuGet 套件]。
在 [瀏覽] 索引標籤上搜尋
Microsoft.Data.SqlClient
,並在找到後加以選取。在 Microsoft.Data.SqlClient 頁面中,選取版本
5.1.0
,然後按一下 [安裝]。當安裝完成時,檢閱所做的變更,然後按一下 [確定] 來關閉 [預覽] 視窗。
如果 [授權接受] 視窗出現時,按一下 [我接受]。
現在,您可以加入 C# 函數程式碼來連接到 SQL Database。
新增計時器觸發函式
在 [方案總管] 中,以滑鼠右鍵按一下函數應用程式專案,並依序選擇 [新增]> [新專案]。
選取 Azure Functions 範本後,將新的項目命名為
DatabaseCleanup.cs
,然後選取 [新增]。在 [新增 Azure 函數] 對話方塊中,選擇 [計時器觸發程序],然後選擇 [新增]。 此對話方塊會建立計時器觸發函數的程式碼檔。
在檔案頂端開啟新的程式碼,並加入下列 using 陳述式:
using Microsoft.Data.SqlClient; using System.Threading.Tasks;
使用下列程式碼來取代現有的
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 Functions 的計時器觸發程序。按 F5 鍵以啟動函數應用程式。 Azure Functions Core Tools 執行視窗會在 Visual Studio 背後開啟。
在啟動之後的 15 秒,該函數就會執行。 觀察輸出並記下 SalesOrderHeader 資料表中更新的資料列數目。
在第一次執行時,您應該更新 32 個資料列。 下列執行不更新任何資料列,除非您對 SalesOrderHeader 資料表資料進行變更,以便
UPDATE
陳述式選取更多資料列。
如果您打算發佈此函數,請記住將 TimerTrigger
屬性變更為比每 15 秒更合理的 cron 排程。 您也必須確定函數應用程式可以存取 Azure SQL Database 或 Azure SQL 受控執行個體。 如需詳細資訊,請根據 Azure SQL 類型參閱下列其中一個連結:
下一步
接下來,了解如何使用。 將 Functions 與 Logic Apps 搭配使用以與其他服務整合。
如需 Functions 的詳細資訊,請參閱下列文章:
- Azure Functions 開發人員參考
可供程式設計人員撰寫函數程式碼及定義觸發程序和繫結時參考。 - 測試 Azure Functions
說明可用於測試函式的各種工具和技巧。