ربط إدخال Azure SQL لوظائف Azure
عند تشغيل دالة، يقوم ربط إدخال البيانات Azure SQL باسترداد البيانات من قاعدة بيانات وتمريرها إلى معلمة الإدخال للدالة.
للحصول على معلومات حول تفاصيل الإعداد والتكوين، راجع الاستعراض العام.
هام
تستخدم هذه المقالة علامات التبويب لدعم إصدارات متعددة من نموذج البرمجة Node.js. يتوفر نموذج v4 بشكل عام وتم تصميمه للحصول على تجربة أكثر مرونة وبديهية لمطوري JavaScript وTypeScript. لمزيد من التفاصيل حول كيفية عمل نموذج v4، راجع دليل مطور Azure Functions Node.js. لمعرفة المزيد حول الاختلافات بين v3 وv4، راجع دليل الترحيل.
الأمثلة
يمكن إنشاء دالة C# باستخدام أحد أوضاع C# التالية:
- نموذج العامل المعزول: دالة C# المترجمة التي يتم تشغيلها في عملية عامل معزولة عن وقت التشغيل. عملية العامل المعزولة مطلوبة لدعم وظائف C# التي تعمل على إصدارات LTS وغير LTS .NET و.NET Framework.
- نموذج قيد المعالجة: دالة C# المحولة برمجيا التي تعمل في نفس العملية مثل وقت تشغيل الوظائف.
- البرنامج النصي C#: يستخدم بشكل أساسي عند إنشاء وظائف C# في مدخل Microsoft Azure.
هام
سينتهي الدعم للنموذج قيد التنفيذ في 10 نوفمبر 2026. نوصي بشدة بترحيل تطبيقاتك إلى نموذج العامل المعزول للحصول على الدعم الكامل.
يتوفر المزيد من العينات لربط إدخال البيانات Azure SQL في مستودع GitHub.
يحتوي هذا القسم على الأمثلة التالية:
- مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
- مشغِّل HTTP، الحصول على سجلات متعددة من بيانات المسار
- مُشغّل HTTP، حذف السجلات
تُشير الأمثلة إلى فئة ToDoItem
وجدول قاعدة بيانات مطابق:
namespace AzureSQL.ToDo
{
public class ToDoItem
{
public Guid Id { get; set; }
public int? order { get; set; }
public string title { get; set; }
public string url { get; set; }
public bool? completed { get; set; }
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
يُظهر المثال التالي دالة C# التي تسترد سجلًا واحدًا. يتم تشغيل الدالة بواسطة طلب HTTP يستخدم سلسلة استعلام لتحديد المعرف. يُستخدم هذا المعرّف لاسترداد سجل ToDoItem
باستخدام الاستعلام المحدد.
إشعار
معلمة سلسلة استعلام HTTP حساسة لحالة الأحرف.
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;
namespace AzureSQLSamples
{
public static class GetToDoItem
{
[FunctionName("GetToDoItem")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitem")]
HttpRequest req,
[SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
commandType: System.Data.CommandType.Text,
parameters: "@Id={Query.id}",
connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItem)
{
return new OkObjectResult(toDoItem.FirstOrDefault());
}
}
}
مشغِّل HTTP، الحصول على سجلات متعددة من معلمة المسار
يُوضح المثال التالي دالة C# التي تسترد المستندات التي تم إرجاعها بواسطة الاستعلام. يتم تشغيل الدالة بواسطة طلب HTTP يستخدم بيانات المسار لتحديد قيمة معلمة استعلام. يتم استخدام هذه المعلمة لتصفية السجلات ToDoItem
في الاستعلام المحدد.
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker.Http;
namespace AzureSQLSamples
{
public static class GetToDoItems
{
[FunctionName("GetToDoItems")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "gettodoitems/{priority}")]
HttpRequest req,
[SqlInput(commandText: "select [Id], [order], [title], [url], [completed] from dbo.ToDo where [Priority] > @Priority",
commandType: System.Data.CommandType.Text,
parameters: "@Priority={priority}",
connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItems)
{
return new OkObjectResult(toDoItems);
}
}
}
مُشغّل HTTP، حذف السجلات
يُوضح المثال التالي دالة C# التي تنفذ إجراءً مخزنًا مع إدخال من معلمة استعلام طلب HTTP.
يجب إنشاء الإجراء المخزن dbo.DeleteToDo
على قاعدة بيانات SQL. وفي هذا المثال، يحذف الإجراء المخزن سجلاً واحدًا أو كافة السجلات اعتمادًا على قيمة المعلمة.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
namespace AzureSQL.ToDo
{
public static class DeleteToDo
{
// delete all items or a specific item from querystring
// returns remaining items
// uses input binding with a stored procedure DeleteToDo to delete items and return remaining items
[FunctionName("DeleteToDo")]
public static IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "DeleteFunction")] HttpRequest req,
ILogger log,
[SqlInput(commandText: "DeleteToDo", commandType: System.Data.CommandType.StoredProcedure,
parameters: "@Id={Query.id}", connectionStringSetting: "SqlConnectionString")]
IEnumerable<ToDoItem> toDoItems)
{
return new OkObjectResult(toDoItems);
}
}
}
يتوفر المزيد من العينات لربط إدخال البيانات Azure SQL في مستودع GitHub.
يحتوي هذا القسم على الأمثلة التالية:
- مُشغل HTTP، الحصول علي سجلات متعددة
- مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
- مُشغّل HTTP، حذف السجلات
تشير الأمثلة ToDoItem
إلى فئة (في ملف ToDoItem.java
منفصل) وجدول قاعدة بيانات مطابق:
package com.function;
import java.util.UUID;
public class ToDoItem {
public UUID Id;
public int order;
public String title;
public String url;
public boolean completed;
public ToDoItem() {
}
public ToDoItem(UUID Id, int order, String title, String url, boolean completed) {
this.Id = Id;
this.order = order;
this.title = title;
this.url = url;
this.completed = completed;
}
}
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
مُشغل HTTP، الحصول علي سجلات متعددة
يوضح المثال التالي ربط إدخال SQL في دالة Java التي يتم تشغيلها بواسطة طلب HTTP وتقرأ من استعلام وترجع النتائج في استجابة HTTP.
package com.function;
import com.microsoft.azure.functions.HttpMethod;
import com.microsoft.azure.functions.HttpRequestMessage;
import com.microsoft.azure.functions.HttpResponseMessage;
import com.microsoft.azure.functions.HttpStatus;
import com.microsoft.azure.functions.annotation.AuthorizationLevel;
import com.microsoft.azure.functions.annotation.FunctionName;
import com.microsoft.azure.functions.annotation.HttpTrigger;
import com.microsoft.azure.functions.sql.annotation.SQLInput;
import java.util.Optional;
public class GetToDoItems {
@FunctionName("GetToDoItems")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@SQLInput(
name = "toDoItems",
commandText = "SELECT * FROM dbo.ToDo",
commandType = "Text",
connectionStringSetting = "SqlConnectionString")
ToDoItem[] toDoItems) {
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
}
}
مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
يوضح المثال التالي ربط إدخال SQL في دالة Java التي يتم تشغيلها بواسطة طلب HTTP ويقرأ من استعلام تمت تصفيته بواسطة معلمة من سلسلة الاستعلام وإرجاع الصف في استجابة HTTP.
public class GetToDoItem {
@FunctionName("GetToDoItem")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@SQLInput(
name = "toDoItems",
commandText = "SELECT * FROM dbo.ToDo",
commandType = "Text",
parameters = "@Id={Query.id}",
connectionStringSetting = "SqlConnectionString")
ToDoItem[] toDoItems) {
ToDoItem toDoItem = toDoItems[0];
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItem).build();
}
}
مُشغّل HTTP، حذف السجلات
يوضح المثال التالي ربط إدخال SQL في دالة Java التي يتم تشغيلها بواسطة طلب HTTP وتنفيذ إجراء مخزن مع إدخال من معلمة استعلام طلب HTTP.
يجب إنشاء الإجراء المخزن dbo.DeleteToDo
على قاعدة بيانات SQL. وفي هذا المثال، يحذف الإجراء المخزن سجلاً واحدًا أو كافة السجلات اعتمادًا على قيمة المعلمة.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
public class DeleteToDo {
@FunctionName("DeleteToDo")
public HttpResponseMessage run(
@HttpTrigger(
name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
@SQLInput(
name = "toDoItems",
commandText = "dbo.DeleteToDo",
commandType = "StoredProcedure",
parameters = "@Id={Query.id}",
connectionStringSetting = "SqlConnectionString")
ToDoItem[] toDoItems) {
return request.createResponseBuilder(HttpStatus.OK).header("Content-Type", "application/json").body(toDoItems).build();
}
}
يتوفر المزيد من العينات لربط إدخال البيانات Azure SQL في مستودع GitHub.
يحتوي هذا القسم على الأمثلة التالية:
- مُشغل HTTP، الحصول علي سجلات متعددة
- مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
- مُشغّل HTTP، حذف السجلات
تُشير الأمثلة إلى جدول قاعدة البيانات:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
مُشغل HTTP، الحصول علي سجلات متعددة
يوضح المثال التالي ربط إدخال SQL الذي يتم تشغيله بواسطة طلب HTTP ويقرأ من استعلام ويعيد النتائج في استجابة HTTP.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
commandType: 'Text',
connectionStringSetting: 'SqlConnectionString',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo',
commandType: 'Text',
connectionStringSetting: 'SqlConnectionString',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: (request, context) => {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
},
});
مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
يوضح المثال التالي ربط إدخال SQL الذي يتم تشغيله بواسطة طلب HTTP ويقرأ من استعلام تمت تصفيته بواسطة معلمة من سلسلة الاستعلام وإرجاع الصف في استجابة HTTP.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
commandType: 'Text',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItem = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItem,
};
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const sqlInput = input.sql({
commandText: 'select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id',
commandType: 'Text',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: (request, context) => {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItem = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItem,
};
},
});
مُشغّل HTTP، حذف السجلات
يوضح المثال التالي ربط إدخال SQL الذي يتم تشغيله بواسطة طلب HTTP وينفذ إجراء مخزنا مع إدخال من معلمة استعلام طلب HTTP.
يجب إنشاء الإجراء المخزن dbo.DeleteToDo
على قاعدة بيانات SQL. وفي هذا المثال، يحذف الإجراء المخزن سجلاً واحدًا أو كافة السجلات اعتمادًا على قيمة المعلمة.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const sqlInput = input.sql({
commandText: 'DeleteToDo',
commandType: 'StoredProcedure',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const sqlInput = input.sql({
commandText: 'DeleteToDo',
commandType: 'StoredProcedure',
parameters: '@Id={Query.id}',
connectionStringSetting: 'SqlConnectionString',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
extraInputs: [sqlInput],
handler: (request, context) => {
context.log('HTTP trigger and SQL input binding function processed a request.');
const toDoItems = context.extraInputs.get(sqlInput);
return {
jsonBody: toDoItems,
};
},
});
يتوفر المزيد من العينات لربط إدخال البيانات Azure SQL في مستودع GitHub.
يحتوي هذا القسم على الأمثلة التالية:
- مُشغل HTTP، الحصول علي سجلات متعددة
- مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
- مُشغّل HTTP، حذف السجلات
تُشير الأمثلة إلى جدول قاعدة البيانات:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
مُشغل HTTP، الحصول علي سجلات متعددة
يظهر المثال التالي ربط إدخال SQL في ملف function.json ودالة PowerShell التي يتم تشغيلها بواسطة طلب HTTP وتقرأ من استعلام وترجع النتائج في استجابة HTTP.
فيما يلي هو ربط البيانات في ملف function.json:
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItems",
"type": "sql",
"direction": "in",
"commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo",
"commandType": "Text",
"connectionStringSetting": "SqlConnectionString"
}
قسم التكوين يشرح هذه الخصائص.
فيما يلي نموذج التعليمات البرمجية PowerShell للدالة في run.ps1
الملف:
using namespace System.Net
param($Request, $todoItems)
Write-Host "PowerShell function with SQL Input Binding processed a request."
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = $todoItems
})
مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
يظهر المثال التالي ربط إدخال SQL في دالة PowerShell التي يتم تشغيلها بواسطة طلب HTTP ويقرأ من استعلام تمت تصفيته بواسطة معلمة من سلسلة الاستعلام وإرجاع الصف في استجابة HTTP.
فيما يلي هو ربط البيانات في ملف function.json:
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItem",
"type": "sql",
"direction": "in",
"commandText": "select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
"commandType": "Text",
"parameters": "@Id = {Query.id}",
"connectionStringSetting": "SqlConnectionString"
}
قسم التكوين يشرح هذه الخصائص.
فيما يلي نموذج التعليمات البرمجية PowerShell للدالة في run.ps1
الملف:
using namespace System.Net
param($Request, $todoItem)
Write-Host "PowerShell function with SQL Input Binding processed a request."
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = $todoItem
})
مُشغّل HTTP، حذف السجلات
يوضح المثال التالي ربط إدخال SQL في ملف function.json ودالة PowerShell التي يتم تشغيلها بواسطة طلب HTTP وتنفيذ إجراء مخزن مع إدخال من معلمة استعلام طلب HTTP.
يجب إنشاء الإجراء المخزن dbo.DeleteToDo
على قاعدة بيانات SQL. وفي هذا المثال، يحذف الإجراء المخزن سجلاً واحدًا أو كافة السجلات اعتمادًا على قيمة المعلمة.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
},
{
"name": "todoItems",
"type": "sql",
"direction": "in",
"commandText": "DeleteToDo",
"commandType": "StoredProcedure",
"parameters": "@Id = {Query.id}",
"connectionStringSetting": "SqlConnectionString"
}
قسم التكوين يشرح هذه الخصائص.
فيما يلي نموذج التعليمات البرمجية PowerShell للدالة في run.ps1
الملف:
using namespace System.Net
param($Request, $todoItems)
Write-Host "PowerShell function with SQL Input Binding processed a request."
Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = $todoItems
})
يتوفر المزيد من العينات لربط إدخال البيانات Azure SQL في مستودع GitHub.
يحتوي هذا القسم على الأمثلة التالية:
- مُشغل HTTP، الحصول علي سجلات متعددة
- مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
- مُشغّل HTTP، حذف السجلات
تُشير الأمثلة إلى جدول قاعدة البيانات:
CREATE TABLE dbo.ToDo (
[Id] UNIQUEIDENTIFIER PRIMARY KEY,
[order] INT NULL,
[title] NVARCHAR(200) NOT NULL,
[url] NVARCHAR(200) NOT NULL,
[completed] BIT NOT NULL
);
مُشغل HTTP، الحصول علي سجلات متعددة
يظهر المثال التالي ربط إدخال SQL في ملف function.json ودالة Python التي يتم تشغيلها بواسطة طلب HTTP وتقرأ من استعلام وترجع النتائج في استجابة HTTP.
فيما يلي نموذج التعليمات البرمجية python لملف function_app.py:
import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType
app = func.FunctionApp()
@app.function_name(name="GetToDo")
@app.route(route="gettodo")
@app.sql_input(arg_name="todo",
command_text="select [Id], [order], [title], [url], [completed] from dbo.ToDo",
command_type="Text",
connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), todo))
return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)
مشغل HTTP، الحصول على سجل حسب المعرّف من سلسلة الاستعلام
يظهر المثال التالي ربط إدخال SQL في دالة Python التي يتم تشغيلها بواسطة طلب HTTP ويقرأ من استعلام تمت تصفيته بواسطة معلمة من سلسلة الاستعلام وإرجاع الصف في استجابة HTTP.
فيما يلي نموذج التعليمات البرمجية python لملف function_app.py:
import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType
app = func.FunctionApp()
@app.function_name(name="GetToDo")
@app.route(route="gettodo/{id}")
@app.sql_input(arg_name="todo",
command_text="select [Id], [order], [title], [url], [completed] from dbo.ToDo where Id = @Id",
command_type="Text",
parameters="@Id={id}",
connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), todo))
return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)
مُشغّل HTTP، حذف السجلات
يوضح المثال التالي ربط إدخال SQL في ملف function.json ودالة Python التي يتم تشغيلها بواسطة طلب HTTP وتنفيذ إجراء مخزن مع إدخال من معلمة استعلام طلب HTTP.
يجب إنشاء الإجراء المخزن dbo.DeleteToDo
على قاعدة بيانات SQL. وفي هذا المثال، يحذف الإجراء المخزن سجلاً واحدًا أو كافة السجلات اعتمادًا على قيمة المعلمة.
CREATE PROCEDURE [dbo].[DeleteToDo]
@Id NVARCHAR(100)
AS
DECLARE @UID UNIQUEIDENTIFIER = TRY_CAST(@ID AS UNIQUEIDENTIFIER)
IF @UId IS NOT NULL AND @Id != ''
BEGIN
DELETE FROM dbo.ToDo WHERE Id = @UID
END
ELSE
BEGIN
DELETE FROM dbo.ToDo WHERE @ID = ''
END
SELECT [Id], [order], [title], [url], [completed] FROM dbo.ToDo
GO
فيما يلي نموذج التعليمات البرمجية python لملف function_app.py:
import json
import logging
import azure.functions as func
from azure.functions.decorators.core import DataType
app = func.FunctionApp()
@app.function_name(name="DeleteToDo")
@app.route(route="deletetodo/{id}")
@app.sql_input(arg_name="todo",
command_text="DeleteToDo",
command_type="StoredProcedure",
parameters="@Id={id}",
connection_string_setting="SqlConnectionString")
def get_todo(req: func.HttpRequest, todo: func.SqlRowList) -> func.HttpResponse:
rows = list(map(lambda r: json.loads(r.to_json()), todo))
return func.HttpResponse(
json.dumps(rows),
status_code=200,
mimetype="application/json"
)
السمات
تستخدم مكتبة C# السمة SqlAttribute للإعلان عن روابط SQL على الدالة، والتي تحتوي على الخصائص التالية:
خاصية السمة | الوصف |
---|---|
CommandText | مطلوب. أمر الاستعلام Transact-SQL أو اسم الإجراء المخزن الذي تم تنفيذه بواسطة الربط. |
ConnectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي يتم تنفيذ الاستعلام أو الإجراء المخزن عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلًا من ذلك حلها إلى متغير البيئة. |
CommandType | مطلوب. قيمة CommandType، وهي نص لاستعلام وStoredProcedure لإجراء مخزن. |
البارامترات | اختياري. صفر أو أكثر من قيم المُعلمات التي تم تمريرها إلى الأمر أثناء التنفيذ كسلسلة واحدة. ينبغي أن تتبع التنسيق @param1=param1,@param2=param2 . لا يمكن أن يحتوي اسم المُعلمة ولا قيمة المُعلمة على فاصلة (, ) أو علامة يساوي (= ). |
تعليقات توضيحية
في مكتبة وقت تشغيل وظائف Java، استخدم @SQLInput
التعليق التوضيحي (com.microsoft.azure.functions.sql.annotation.SQLInput
) على المعلمات التي تأتي قيمتها من Azure SQL. يدعم هذا التعليق التوضيحي العناصر التالية:
العنصر | الوصف |
---|---|
commandText | مطلوب. أمر الاستعلام Transact-SQL أو اسم الإجراء المخزن الذي تم تنفيذه بواسطة الربط. |
connectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي يتم تنفيذ الاستعلام أو الإجراء المخزن عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلًا من ذلك حلها إلى متغير البيئة. |
commandType | مطلوب. قيمة CommandType، وهي "نص" لاستعلام و"StoredProcedure" لإجراء مخزن. |
الاسم | مطلوب. الاسم الفريد لربط الدالة. |
البارامترات | اختياري. صفر أو أكثر من قيم المُعلمات التي تم تمريرها إلى الأمر أثناء التنفيذ كسلسلة واحدة. ينبغي أن تتبع التنسيق @param1=param1,@param2=param2 . لا يمكن أن يحتوي اسم المُعلمة ولا قيمة المُعلمة على فاصلة (, ) أو علامة يساوي (= ). |
التكوين
يوضح الجدول التالي الخصائص التي يمكنك تعيينها على الكائن الذي options
تم تمريره input.sql()
إلى الأسلوب .
الخاصية | الوصف |
---|---|
commandText | مطلوب. أمر الاستعلام Transact-SQL أو اسم الإجراء المخزن الذي تم تنفيذه بواسطة الربط. |
connectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي يتم تنفيذ الاستعلام أو الإجراء المخزن عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلًا من ذلك حلها إلى متغير البيئة. تتوفر الكلمات الأساسية الاختيارية في قيمة سلسلة الاتصال لتحسين اتصال روابط SQL. |
commandType | مطلوب. قيمة CommandType، وهي نص لاستعلام وStoredProcedure لإجراء مخزن. |
البارامترات | اختياري. صفر أو أكثر من قيم المُعلمات التي تم تمريرها إلى الأمر أثناء التنفيذ كسلسلة واحدة. ينبغي أن تتبع التنسيق @param1=param1,@param2=param2 . لا يمكن أن يحتوي اسم المُعلمة ولا قيمة المُعلمة على فاصلة (, ) أو علامة يساوي (= ). |
التكوين
يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.
خاصية function.json | الوصف |
---|---|
النوع | مطلوب. يجب تعيينه إلى sql . |
الاتجاه | مطلوب. يجب تعيينه إلى in . |
الاسم | مطلوب. اسم المتغير الذي يُمثل قائمة الانتظار في التعليمة البرمجية للدالة. |
commandText | مطلوب. أمر الاستعلام Transact-SQL أو اسم الإجراء المخزن الذي تم تنفيذه بواسطة الربط. |
connectionStringSetting | مطلوب. اسم إعداد تطبيق يحتوي على سلسلة الاتصال لقاعدة البيانات التي يتم تنفيذ الاستعلام أو الإجراء المخزن عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلًا من ذلك حلها إلى متغير البيئة. تتوفر الكلمات الأساسية الاختيارية في قيمة سلسلة الاتصال لتحسين اتصال روابط SQL. |
commandType | مطلوب. قيمة CommandType، وهي نص لاستعلام وStoredProcedure لإجراء مخزن. |
البارامترات | اختياري. صفر أو أكثر من قيم المُعلمات التي تم تمريرها إلى الأمر أثناء التنفيذ كسلسلة واحدة. ينبغي أن تتبع التنسيق @param1=param1,@param2=param2 . لا يمكن أن يحتوي اسم المُعلمة ولا قيمة المُعلمة على فاصلة (, ) أو علامة يساوي (= ). |
عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values
.
الاستخدام
يأخذ مُنشئ السمة نص الأمر SQL ونوع الأمر والمعلمات واسم إعداد سلسلة الاتصال. يُمكن أن يكون الأمر استعلام Transact-SQL (T-SQL) مع نوع System.Data.CommandType.Text
الأمر أو اسم الإجراء المخزن مع نوع الأمر System.Data.CommandType.StoredProcedure
. يتوافق اسم إعداد سلسلة الاتصال مع إعداد التطبيق (في local.settings.json
للتطوير المحلي) الذي يحتوي على سلسلة الاتصال بـ Azure SQL أو مثيل SQL Server.
يتم تحديد معلمات الاستعلامات التي يتم تنفيذها بواسطة ربط الإدخال في Microsoft.Data.SqlClient لتقليل مخاطر حقن SQL من قيم المعلمات التي تم تمريرها إلى الربط.
إذا حدث استثناء عند تنفيذ ربط إدخال SQL، فلن يتم تنفيذ التعليمات البرمجية للدالة. قد يؤدي هذا إلى إرجاع رمز خطأ، مثل مشغل HTTP الذي يرجع رمز خطأ 500.