ربط إخراج 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.

يحتوي هذا القسم على الأمثلة التالية:

تُشير الأمثلة إلى فئة 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
);

لإرجاع روابط إخراج متعددة في عيناتنا، سنقوم بإنشاء نوع إرجاع مخصص:

public static class OutputType
{
    [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
    public ToDoItem ToDoItem { get; set; }
    public HttpResponseData HttpResponse { get; set; }
}

مشغل HTTP، اكتب سجلاً واحداً

يظهر المثال التالي دالة C# التي تضيف سجلا إلى قاعدة بيانات، باستخدام البيانات المتوفرة في طلب HTTP POST كنص JSON. كائن الإرجاع هو الفئة التي OutputType أنشأناها لمعالجة كل من استجابة HTTP وربط إخراج SQL.

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace AzureSQL.ToDo
{
    public static class PostToDo
    {
        // create a new ToDoItem from body object
        // uses output binding to insert new item into ToDo table
        [FunctionName("PostToDo")]
        public static async Task<OutputType> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PostFunction")] HttpRequestData req,
                FunctionContext executionContext)
        {
            var logger = executionContext.GetLogger("PostToDo");
            logger.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            ToDoItem toDoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);

            // generate a new id for the todo item
            toDoItem.Id = Guid.NewGuid();

            // set Url from env variable ToDoUri
            toDoItem.url = Environment.GetEnvironmentVariable("ToDoUri")+"?id="+toDoItem.Id.ToString();

            // if completed is not provided, default to false
            if (toDoItem.completed == null)
            {
                toDoItem.completed = false;
            }

            return new OutputType()
            {
                ToDoItem = toDoItem,
                HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.Created)
            }
        }
    }

    public static class OutputType
    {
        [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
        public ToDoItem ToDoItem { get; set; }

        public HttpResponseData HttpResponse { get; set; }
    }
}

مشغل HTTP، اكتب على جدولين

يوضح المثال التالي دالة C# التي تضيف سجلات إلى قاعدة بيانات في جدولين مختلفين (dbo.ToDo وdbo.RequestLog)، باستخدام البيانات المتوفرة في طلب HTTP POST كنص JSON وروابط إخراج متعددة.

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

لاستخدام ربط إخراج إضافي، نضيف فئة للفئة RequestLog الخاصة بنا OutputType ونعدلها:

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Azure.Functions.Worker.Extensions.Sql;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;

namespace AzureSQL.ToDo
{
    public static class PostToDo
    {
        // create a new ToDoItem from body object
        // uses output binding to insert new item into ToDo table
        [FunctionName("PostToDo")]
        public static async Task<OutputType> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "PostFunction")] HttpRequestData req,
                FunctionContext executionContext)
        {
            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            ToDoItem toDoItem = JsonConvert.DeserializeObject<ToDoItem>(requestBody);

            // generate a new id for the todo item
            toDoItem.Id = Guid.NewGuid();

            // set Url from env variable ToDoUri
            toDoItem.url = Environment.GetEnvironmentVariable("ToDoUri")+"?id="+toDoItem.Id.ToString();

            // if completed is not provided, default to false
            if (toDoItem.completed == null)
            {
                toDoItem.completed = false;
            }

            requestLog = new RequestLog();
            requestLog.RequestTimeStamp = DateTime.Now;
            requestLog.ItemCount = 1;

            return new OutputType()
            {
                ToDoItem = toDoItem,
                RequestLog = requestLog,
                HttpResponse = req.CreateResponse(System.Net.HttpStatusCode.Created)
            }
        }
    }

    public class RequestLog {
        public DateTime RequestTimeStamp { get; set; }
        public int ItemCount { get; set; }
    }

    public static class OutputType
    {
        [SqlOutput("dbo.ToDo", connectionStringSetting: "SqlConnectionString")]
        public ToDoItem ToDoItem { get; set; }

        [SqlOutput("dbo.RequestLog", connectionStringSetting: "SqlConnectionString")]
        public RequestLog RequestLog { get; set; }

        public HttpResponseData HttpResponse { get; set; }
    }

}

يتوفر المزيد من العينات لربط إخراج Azure SQL في مستودع GitHub.

يحتوي هذا القسم على الأمثلة التالية:

تشير الأمثلة 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 POST كنص JSON. تأخذ الدالة تبعية إضافية على مكتبة com.google.code.gson لتحليل نص JSON.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>
package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.sql.annotation.SQLOutput;
import com.google.gson.Gson;

import java.util.Optional;

public class PostToDo {
    @FunctionName("PostToDo")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @SQLOutput(
                name = "toDoItem",
                commandText = "dbo.ToDo",
                connectionStringSetting = "SqlConnectionString")
                OutputBinding<ToDoItem> output) {
        String json = request.getBody().get();
        Gson gson = new Gson();
        ToDoItem newToDo = gson.fromJson(json, ToDoItem.class);

        newToDo.Id = UUID.randomUUID();
        output.setValue(newToDo);

        return request.createResponseBuilder(HttpStatus.CREATED).header("Content-Type", "application/json").body(output).build();
    }
}

مشغل HTTP، اكتب على جدولين

يوضح المثال التالي ربط إخراج SQL في دالة JavaS التي تضيف سجلات إلى قاعدة بيانات في جدولين مختلفين (dbo.ToDo و dbo.RequestLog)، باستخدام البيانات المتوفرة في طلب HTTP POST كنص JSON وروابط إخراج متعددة. تأخذ الدالة تبعية إضافية على مكتبة com.google.code.gson لتحليل نص JSON.

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

الجدول الثاني، dbo.RequestLog، يتوافق مع التعريف التالي:

CREATE TABLE dbo.RequestLog (
    Id INT IDENTITY(1,1) PRIMARY KEY,
    RequestTimeStamp DATETIME2 NOT NULL DEFAULT(GETDATE()),
    ItemCount INT NOT NULL
)

وفئة Java في RequestLog.java:

package com.function;

import java.util.Date;

public class RequestLog {
    public int Id;
    public Date RequestTimeStamp;
    public int ItemCount;

    public RequestLog() {
    }

    public RequestLog(int Id, Date RequestTimeStamp, int ItemCount) {
        this.Id = Id;
        this.RequestTimeStamp = RequestTimeStamp;
        this.ItemCount = ItemCount;
    }
}
package com.function;

import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
import com.microsoft.azure.functions.sql.annotation.SQLOutput;
import com.google.gson.Gson;

import java.util.Optional;

public class PostToDoWithLog {
    @FunctionName("PostToDoWithLog")
    public HttpResponseMessage run(
            @HttpTrigger(name = "req", methods = {HttpMethod.POST}, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            @SQLOutput(
                name = "toDoItem",
                commandText = "dbo.ToDo",
                connectionStringSetting = "SqlConnectionString")
                OutputBinding<ToDoItem> output,
            @SQLOutput(
                name = "requestLog",
                commandText = "dbo.RequestLog",
                connectionStringSetting = "SqlConnectionString")
                OutputBinding<RequestLog> outputLog,
            final ExecutionContext context) {
        context.getLogger().info("Java HTTP trigger processed a request.");

        String json = request.getBody().get();
        Gson gson = new Gson();
        ToDoItem newToDo = gson.fromJson(json, ToDoItem.class);
        newToDo.Id = UUID.randomUUID();
        output.setValue(newToDo);

        RequestLog newLog = new RequestLog();
        newLog.ItemCount = 1;
        outputLog.setValue(newLog);

        return request.createResponseBuilder(HttpStatus.CREATED).header("Content-Type", "application/json").body(output).build();
    }
}

يتوفر المزيد من العينات لربط إخراج Azure SQL في مستودع GitHub.

يحتوي هذا القسم على الأمثلة التالية:

تُشير الأمثلة إلى جدول قاعدة البيانات:

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 POST كنص JSON.

import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const sqlOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL output binding function processed a request.');

    const body = await request.json();
    context.extraOutputs.set(sqlOutput, body);
    return { status: 201 };
}

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlOutput],
    handler: httpTrigger1,
});
const { app, output } = require('@azure/functions');

const sqlOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlOutput],
    handler: async (request, context) => {
        context.log('HTTP trigger and SQL output binding function processed a request.');

        const body = await request.json();
        context.extraOutputs.set(sqlOutput, body);
        return { status: 201 };
    },
});

مشغل HTTP، اكتب على جدولين

يوضح المثال التالي ربط إخراج SQL الذي يضيف سجلات إلى قاعدة بيانات في جدولين مختلفين (dbo.ToDo و dbo.RequestLog)، باستخدام البيانات المتوفرة في طلب HTTP POST كنص JSON وروابط إخراج متعددة.

الجدول الثاني، dbo.RequestLog، يتوافق مع التعريف التالي:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)
import { app, HttpRequest, HttpResponseInit, InvocationContext, output } from '@azure/functions';

const sqlTodoOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

const sqlRequestLogOutput = output.sql({
    commandText: 'dbo.RequestLog',
    connectionStringSetting: 'SqlConnectionString',
});

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log('HTTP trigger and SQL output binding function processed a request.');

    const newLog = {
        RequestTimeStamp: Date.now(),
        ItemCount: 1,
    };
    context.extraOutputs.set(sqlRequestLogOutput, newLog);

    const body = await request.json();
    context.extraOutputs.set(sqlTodoOutput, body);

    return { status: 201 };
}

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlTodoOutput, sqlRequestLogOutput],
    handler: httpTrigger1,
});
const { app, output } = require('@azure/functions');

const sqlTodoOutput = output.sql({
    commandText: 'dbo.ToDo',
    connectionStringSetting: 'SqlConnectionString',
});

const sqlRequestLogOutput = output.sql({
    commandText: 'dbo.RequestLog',
    connectionStringSetting: 'SqlConnectionString',
});

app.http('httpTrigger1', {
    methods: ['POST'],
    authLevel: 'anonymous',
    extraOutputs: [sqlTodoOutput, sqlRequestLogOutput],
    handler: async (request, context) => {
        context.log('HTTP trigger and SQL output binding function processed a request.');

        const newLog = {
            RequestTimeStamp: Date.now(),
            ItemCount: 1,
        };
        context.extraOutputs.set(sqlRequestLogOutput, newLog);

        const body = await request.json();
        context.extraOutputs.set(sqlTodoOutput, body);

        return { status: 201 };
    },
});

يتوفر المزيد من العينات لربط إخراج Azure SQL في مستودع GitHub.

يحتوي هذا القسم على الأمثلة التالية:

تُشير الأمثلة إلى جدول قاعدة البيانات:

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 POST كنص JSON.

فيما يلي هو ربط البيانات في ملف function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
}

قسم التكوين يشرح هذه الخصائص.

فيما يلي نموذج التعليمات البرمجية PowerShell للدالة في run.ps1 الملف:


```powershell
using namespace System.Net

param($Request)

Write-Host "PowerShell function with SQL Output Binding processed a request."

# Update req_body with the body of the request
$req_body = $Request.Body

# Assign the value we want to pass to the SQL Output binding. 
# The -Name value corresponds to the name property in the function.json for the binding
Push-OutputBinding -Name todoItems -Value $req_body

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

مشغل HTTP، اكتب على جدولين

يظهر المثال التالي ربط إخراج SQL في ملف function.json ودالة PowerShell التي تضيف سجلات إلى قاعدة بيانات في جدولين مختلفين (dbo.ToDo و dbo.RequestLog)، باستخدام البيانات المقدمة في طلب HTTP POST كنص JSON وروابط إخراج متعددة.

الجدول الثاني، dbo.RequestLog، يتوافق مع التعريف التالي:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

فيما يلي هو ربط البيانات في ملف function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "res"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
},
{
    "name": "requestLog",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.RequestLog",
    "connectionStringSetting": "SqlConnectionString"
}

قسم التكوين يشرح هذه الخصائص.

فيما يلي نموذج التعليمات البرمجية PowerShell للدالة في run.ps1 الملف:

using namespace System.Net

param($Request)

Write-Host "PowerShell function with SQL Output Binding processed a request."

# Update req_body with the body of the request
$req_body = $Request.Body
$new_log = @{
    RequestTimeStamp = [DateTime]::Now
    ItemCount = 1
}

Push-OutputBinding -Name todoItems -Value $req_body
Push-OutputBinding -Name requestLog -Value $new_log

Push-OutputBinding -Name res -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $req_body
})

يتوفر المزيد من العينات لربط إخراج Azure SQL في مستودع GitHub.

يحتوي هذا القسم على الأمثلة التالية:

تُشير الأمثلة إلى جدول قاعدة البيانات:

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 POST كنص JSON.

فيما يلي هو ربط البيانات في ملف function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "$return"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
}

قسم التكوين يشرح هذه الخصائص.

ما يلي هو عينة من التعليمة البرمجية Python:

import logging
import azure.functions as func


def main(req: func.HttpRequest, todoItems: func.Out[func.SqlRow]) -> func.HttpResponse:
    logging.info('Python HTTP trigger and SQL output binding function processed a request.')

    try:
        req_body = req.get_json()
        rows = func.SqlRowList(map(lambda r: func.SqlRow.from_dict(r), req_body))
    except ValueError:
        pass

    if req_body:
        todoItems.set(rows)
        return func.HttpResponse(
            todoItems.to_json(),
            status_code=201,
            mimetype="application/json"
        )
    else:
        return func.HttpResponse(
            "Error accessing request body",
            status_code=400
        )

مشغل HTTP، اكتب على جدولين

يظهر المثال التالي ربط إخراج SQL في ملف function.json ودالة Python التي تضيف سجلات إلى قاعدة بيانات في جدولين مختلفين (dbo.ToDo و dbo.RequestLog)، باستخدام البيانات المتوفرة في طلب HTTP POST كنص JSON وروابط إخراج متعددة.

الجدول الثاني، dbo.RequestLog، يتوافق مع التعريف التالي:

CREATE TABLE dbo.RequestLog (
    Id int identity(1,1) primary key,
    RequestTimeStamp datetime2 not null,
    ItemCount int not null
)

فيما يلي هو ربط البيانات في ملف function.json:

{
    "authLevel": "anonymous",
    "type": "httpTrigger",
    "direction": "in",
    "name": "req",
    "methods": [
        "post"
    ]
},
{
    "type": "http",
    "direction": "out",
    "name": "$return"
},
{
    "name": "todoItems",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.ToDo",
    "connectionStringSetting": "SqlConnectionString"
},
{
    "name": "requestLog",
    "type": "sql",
    "direction": "out",
    "commandText": "dbo.RequestLog",
    "connectionStringSetting": "SqlConnectionString"
}

قسم التكوين يشرح هذه الخصائص.

ما يلي هو عينة من التعليمة البرمجية Python:

import logging
from datetime import datetime
import azure.functions as func


def main(req: func.HttpRequest, todoItems: func.Out[func.SqlRow], requestLog: func.Out[func.SqlRow]) -> func.HttpResponse:
    logging.info('Python HTTP trigger and SQL output binding function processed a request.')

    try:
        req_body = req.get_json()
        rows = func.SqlRowList(map(lambda r: func.SqlRow.from_dict(r), req_body))
    except ValueError:
        pass

    requestLog.set(func.SqlRow({
        "RequestTimeStamp": datetime.now(),
        "ItemCount": 1
    }))

    if req_body:
        todoItems.set(rows)
        return func.HttpResponse(
            todoItems.to_json(),
            status_code=201,
            mimetype="application/json"
        )
    else:
        return func.HttpResponse(
            "Error accessing request body",
            status_code=400
        )

السمات

تستخدم مكتبة C# السمة SqlAttribute للإعلان عن روابط SQL على الدالة، والتي تحتوي على الخصائص التالية:

خاصية السمة ‏‏الوصف
CommandText مطلوب. اسم الجدول الذي يتم كتابته بواسطة الربط.
ConnectionStringSetting مطلوب. اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال لقاعدة البيانات التي تتم كتابة البيانات عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلاً من ذلك حلها إلى متغير البيئة.

تعليقات توضيحية

في مكتبة وقت تشغيل وظائف Java، استخدم @SQLOutput التعليق التوضيحي (com.microsoft.azure.functions.sql.annotation.SQLOutput) على المعلمات التي تأتي قيمتها من Azure SQL. يدعم هذا التعليق التوضيحي العناصر التالية:

العنصر الوصف
commandText مطلوب. اسم الجدول الذي يتم كتابته بواسطة الربط.
connectionStringSetting مطلوب. اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال لقاعدة البيانات التي تتم كتابة البيانات عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلاً من ذلك حلها إلى متغير البيئة.
الاسم مطلوب. الاسم الفريد لربط الدالة.

التكوين

يوضح الجدول التالي الخصائص التي يمكنك تعيينها على الكائن الذي options تم تمريره output.sql() إلى الأسلوب .

الخاصية ‏‏الوصف
commandText مطلوب. اسم الجدول الذي يتم كتابته بواسطة الربط.
connectionStringSetting مطلوب. اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال لقاعدة البيانات التي تتم كتابة البيانات عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلاً من ذلك حلها إلى متغير البيئة. تتوفر الكلمات الأساسية الاختيارية في قيمة سلسلة الاتصال لتحسين اتصال روابط SQL.

التكوين

يشرح الجدول الآتي خصائص تكوين ربط البيانات التي عليك تعيينها في ملف function.json.

خاصية function.json ‏‏الوصف
النوع مطلوب. يجب تعيينه إلى sql.
الاتجاه مطلوب. يجب تعيينه إلى out.
الاسم مطلوب. اسم المتغيّر الذي يمثل الكيان في التعليمة البرمجية الوظيفة.
commandText مطلوب. اسم الجدول الذي يتم كتابته بواسطة الربط.
connectionStringSetting مطلوب. اسم إعداد التطبيق الذي يحتوي على سلسلة الاتصال لقاعدة البيانات التي تتم كتابة البيانات عليها. هذه ليست سلسلة الاتصال الفعلية ويجب بدلاً من ذلك حلها إلى متغير البيئة. تتوفر الكلمات الأساسية الاختيارية في قيمة سلسلة الاتصال لتحسين اتصال روابط SQL.

عندما تقوم بالتطوير محليًا، أضف إعدادات التطبيق في ملف local.settings.json في المجموعة Values.

الاستخدام

الخاصية CommandText هي اسم الجدول الذي سيتم تخزين البيانات فيه. يتوافق اسم إعداد سلسلة الاتصال مع إعدادات التطبيق الذي يحتوي على سلسلة الاتصال بمثيل Azure SQL أو SQL Server.

تستخدم روابط الإخراج عبارة T-SQL MERGE التي تتطلب أذونات SELECT على قاعدة البيانات الهدف.

إذا حدث استثناء عند تنفيذ ربط إخراج SQL، تتوقف التعليمات البرمجية للدالة عن التنفيذ. قد يؤدي هذا إلى إرجاع رمز خطأ، مثل مشغل HTTP الذي يرجع رمز خطأ 500. IAsyncCollector إذا تم استخدام في دالة .NET، يمكن للتعليمات البرمجية للدالة معالجة الاستثناءات التي يطرحها الاستدعاء إلى FlushAsync().

الخطوات التالية