Delen via


Azure SQL-invoerbinding voor Azure Functions

Wanneer een functie wordt uitgevoerd, haalt de Azure SQL-invoerbinding gegevens op uit een database en geeft deze door aan de invoerparameter van de functie.

Zie het overzicht voor informatie over het instellen en configureren van details.

Belangrijk

In dit artikel worden tabbladen gebruikt ter ondersteuning van meerdere versies van het Node.js programmeermodel. Het v4-model is algemeen beschikbaar en is ontworpen voor een flexibelere en intuïtievere ervaring voor JavaScript- en TypeScript-ontwikkelaars. Raadpleeg de ontwikkelaarshandleiding voor Azure Functions Node.js voor meer informatie over hoe het v4-model werkt. Raadpleeg de migratiehandleiding voor meer informatie over de verschillen tussen v3 en v4.

Voorbeelden

U kunt een C#-functie maken met behulp van een van de volgende C#-modi:

  • Geïsoleerd werkrolmodel: gecompileerde C#-functie die wordt uitgevoerd in een werkproces dat is geïsoleerd van de runtime. Geïsoleerd werkproces is vereist voor de ondersteuning van C#-functies die worden uitgevoerd op LTS- en niet-LTS-versies .NET en .NET Framework.
  • In-process model: gecompileerde C#-functie die wordt uitgevoerd in hetzelfde proces als de Functions-runtime.
  • C#-script: wordt voornamelijk gebruikt wanneer u C#-functies maakt in Azure Portal.

Meer voorbeelden voor de Azure SQL-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een ToDoItem klasse en een bijbehorende databasetabel:

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-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een C#-functie waarmee één record wordt opgehaald. De functie wordt geactiveerd door een HTTP-aanvraag die gebruikmaakt van een querytekenreeks om de id op te geven. Deze id wordt gebruikt om een ToDoItem record met de opgegeven query op te halen.

Notitie

De http-queryreeksparameter is hoofdlettergevoelig.

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-trigger, meerdere rijen ophalen uit routeparameter

In het volgende voorbeeld ziet u een C#-functie waarmee documenten worden opgehaald die door de query worden geretourneerd. De functie wordt geactiveerd door een HTTP-aanvraag die routegegevens gebruikt om de waarde van een queryparameter op te geven. Deze parameter wordt gebruikt om de ToDoItem records in de opgegeven query te filteren.

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-trigger, rijen verwijderen

In het volgende voorbeeld ziet u een C#-functie waarmee een opgeslagen procedure wordt uitgevoerd met invoer van de queryparameter van de HTTP-aanvraag.

De opgeslagen procedure dbo.DeleteToDo moet worden gemaakt in de SQL-database. In dit voorbeeld verwijdert de opgeslagen procedure één record of alle records, afhankelijk van de waarde van de parameter.

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);
        }
    }
}

Meer voorbeelden voor de Azure SQL-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een ToDoItem klasse (in een afzonderlijk bestand ToDoItem.java) en een bijbehorende databasetabel:

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-trigger, meerdere rijen ophalen

In het volgende voorbeeld ziet u een SQL-invoerbinding in een Java-functie die wordt geactiveerd door een HTTP-aanvraag en leest uit een query en retourneert de resultaten in het HTTP-antwoord.

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-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een SQL-invoerbinding in een Java-functie die wordt geactiveerd door een HTTP-aanvraag en wordt gelezen uit een query die is gefilterd op een parameter uit de queryreeks en de rij in het HTTP-antwoord retourneert.

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-trigger, rijen verwijderen

In het volgende voorbeeld ziet u een SQL-invoerbinding in een Java-functie die wordt geactiveerd door een HTTP-aanvraag en een opgeslagen procedure wordt uitgevoerd met invoer van de queryparameter van de HTTP-aanvraag.

De opgeslagen procedure dbo.DeleteToDo moet worden gemaakt in de database. In dit voorbeeld verwijdert de opgeslagen procedure één record of alle records, afhankelijk van de waarde van de parameter.

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();
    }
}

Meer voorbeelden voor de Azure SQL-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een databasetabel:

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-trigger, meerdere rijen ophalen

In het volgende voorbeeld ziet u een SQL-invoerbinding die wordt geactiveerd door een HTTP-aanvraag en leest uit een query en retourneert de resultaten in het HTTP-antwoord.

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-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een SQL-invoerbinding die wordt geactiveerd door een HTTP-aanvraag en wordt gelezen uit een query die is gefilterd op een parameter uit de queryreeks en de rij in het HTTP-antwoord retourneert.

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-trigger, rijen verwijderen

In het volgende voorbeeld ziet u een SQL-invoerbinding die wordt geactiveerd door een HTTP-aanvraag en een opgeslagen procedure wordt uitgevoerd met invoer uit de queryparameter van de HTTP-aanvraag.

De opgeslagen procedure dbo.DeleteToDo moet worden gemaakt in de database. In dit voorbeeld verwijdert de opgeslagen procedure één record of alle records, afhankelijk van de waarde van de parameter.

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,
        };
    },
});

Meer voorbeelden voor de Azure SQL-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een databasetabel:

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-trigger, meerdere rijen ophalen

Het volgende voorbeeld toont een SQL-invoerbinding in een function.json-bestand en een PowerShell-functie die wordt geactiveerd door een HTTP-aanvraag en leest uit een query en retourneert de resultaten in het HTTP-antwoord.

Hier volgen bindingsgegevens in het function.json-bestand:

{
    "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"
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Hier volgt een PowerShell-voorbeeldcode voor de functie in het run.ps1 bestand:

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-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een SQL-invoerbinding in een PowerShell-functie die wordt geactiveerd door een HTTP-aanvraag en die wordt gelezen uit een query die is gefilterd op een parameter uit de queryreeks en de rij in het HTTP-antwoord retourneert.

Hier volgen bindingsgegevens in het function.json-bestand:

{
    "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"
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Hier volgt een PowerShell-voorbeeldcode voor de functie in het run.ps1 bestand:

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-trigger, rijen verwijderen

In het volgende voorbeeld ziet u een SQL-invoerbinding in een function.json-bestand en een PowerShell-functie die wordt geactiveerd door een HTTP-aanvraag en een opgeslagen procedure wordt uitgevoerd met invoer van de queryparameter voor de HTTP-aanvraag.

De opgeslagen procedure dbo.DeleteToDo moet worden gemaakt in de database. In dit voorbeeld verwijdert de opgeslagen procedure één record of alle records, afhankelijk van de waarde van de parameter.

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"
}

In de configuratiesectie worden deze eigenschappen uitgelegd.

Hier volgt een PowerShell-voorbeeldcode voor de functie in het run.ps1 bestand:

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
})

Meer voorbeelden voor de Azure SQL-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.

Deze sectie bevat de volgende voorbeelden:

De voorbeelden verwijzen naar een databasetabel:

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-trigger, meerdere rijen ophalen

In het volgende voorbeeld ziet u een SQL-invoerbinding in een function.json-bestand en een Python-functie die wordt geactiveerd door een HTTP-aanvraag en leest uit een query en retourneert de resultaten in het HTTP-antwoord.

Hier volgt een python-voorbeeldcode voor het function_app.py-bestand:

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-trigger, rij ophalen op id uit queryreeks

In het volgende voorbeeld ziet u een SQL-invoerbinding in een Python-functie die wordt geactiveerd door een HTTP-aanvraag en wordt gelezen uit een query die is gefilterd op een parameter uit de queryreeks en de rij in het HTTP-antwoord retourneert.

Hier volgt een python-voorbeeldcode voor het function_app.py-bestand:

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-trigger, rijen verwijderen

In het volgende voorbeeld ziet u een SQL-invoerbinding in een function.json-bestand en een Python-functie die wordt geactiveerd door een HTTP-aanvraag en een opgeslagen procedure wordt uitgevoerd met invoer van de queryparameter van de HTTP-aanvraag.

De opgeslagen procedure dbo.DeleteToDo moet worden gemaakt in de database. In dit voorbeeld verwijdert de opgeslagen procedure één record of alle records, afhankelijk van de waarde van de parameter.

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

Hier volgt een python-voorbeeldcode voor het function_app.py-bestand:

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"
    )

Kenmerken

De C#-bibliotheek maakt gebruik van het kenmerk SqlAttribute om de SQL-bindingen voor de functie te declareren, die de volgende eigenschappen heeft:

Kenmerkeigenschap Beschrijving
CommandText Vereist. De Transact-SQL-queryopdracht of -naam van de opgeslagen procedure die door de binding wordt uitgevoerd.
ConnectionStringSetting Vereist. De naam van een app-instelling die de verbindingsreeks bevat voor de database waarop de query of opgeslagen procedure wordt uitgevoerd. Deze waarde is niet de werkelijke verbindingsreeks en moet in plaats daarvan worden omgezet in de naam van een omgevingsvariabele.
CommandType Vereist. Een CommandType-waarde, tekst voor een query en StoredProcedure voor een opgeslagen procedure.
Parameters Optioneel. Nul of meer parameterwaarden die tijdens de uitvoering aan de opdracht zijn doorgegeven als één tekenreeks. Moet de notatie @param1=param1,@param2=param2volgen. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.

Aantekeningen

Gebruik in de Java Functions Runtime-bibliotheek de @SQLInput aantekening (com.microsoft.azure.functions.sql.annotation.SQLInput) voor parameters waarvan de waarde afkomstig is van Azure SQL. Deze aantekening ondersteunt de volgende elementen:

Element Beschrijving
commandText Vereist. De Transact-SQL-queryopdracht of -naam van de opgeslagen procedure die door de binding wordt uitgevoerd.
connectionStringSetting Vereist. De naam van een app-instelling die de verbindingsreeks bevat voor de database waarop de query of opgeslagen procedure wordt uitgevoerd. Deze waarde is niet de werkelijke verbindingsreeks en moet in plaats daarvan worden omgezet in de naam van een omgevingsvariabele.
commandType Vereist. Een CommandType-waarde, die 'Tekst' is voor een query en 'StoredProcedure' voor een opgeslagen procedure.
name Vereist. De unieke naam van de functiebinding.
parameters Optioneel. Nul of meer parameterwaarden die tijdens de uitvoering aan de opdracht zijn doorgegeven als één tekenreeks. Moet de notatie @param1=param1,@param2=param2volgen. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.

Configuratie

In de volgende tabel worden de eigenschappen uitgelegd die u kunt instellen voor het options object dat aan de input.sql() methode is doorgegeven.

Eigenschappen Beschrijving
commandText Vereist. De Transact-SQL-queryopdracht of -naam van de opgeslagen procedure die door de binding wordt uitgevoerd.
connectionStringSetting Vereist. De naam van een app-instelling die de verbindingsreeks bevat voor de database waarop de query of opgeslagen procedure wordt uitgevoerd. Deze waarde is niet de werkelijke verbindingsreeks en moet in plaats daarvan worden omgezet in de naam van een omgevingsvariabele. Optionele trefwoorden in de verbindingsreeks-waarde zijn beschikbaar om de connectiviteit van SQL-bindingen te verfijnen.
commandType Vereist. Een CommandType-waarde, tekst voor een query en StoredProcedure voor een opgeslagen procedure.
parameters Optioneel. Nul of meer parameterwaarden die tijdens de uitvoering aan de opdracht zijn doorgegeven als één tekenreeks. Moet de notatie @param1=param1,@param2=param2volgen. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.

Configuratie

In de volgende tabel worden de bindingsconfiguratie-eigenschappen uitgelegd die u in het function.json-bestand hebt ingesteld.

function.json-eigenschap Beschrijving
type Vereist. Moet worden ingesteld op sql.
direction Vereist. Moet worden ingesteld op in.
name Vereist. De naam van de variabele die de query vertegenwoordigt, resulteert in functiecode.
commandText Vereist. De Transact-SQL-queryopdracht of -naam van de opgeslagen procedure die door de binding wordt uitgevoerd.
connectionStringSetting Vereist. De naam van een app-instelling die de verbindingsreeks bevat voor de database waarop de query of opgeslagen procedure wordt uitgevoerd. Deze waarde is niet de werkelijke verbindingsreeks en moet in plaats daarvan worden omgezet in de naam van een omgevingsvariabele. Optionele trefwoorden in de verbindingsreeks-waarde zijn beschikbaar om de connectiviteit van SQL-bindingen te verfijnen.
commandType Vereist. Een CommandType-waarde, tekst voor een query en StoredProcedure voor een opgeslagen procedure.
parameters Optioneel. Nul of meer parameterwaarden die tijdens de uitvoering aan de opdracht zijn doorgegeven als één tekenreeks. Moet de notatie @param1=param1,@param2=param2volgen. De parameternaam en de parameterwaarde mogen geen komma (,) of een gelijkteken (=) bevatten.

Wanneer u lokaal ontwikkelt, voegt u uw toepassingsinstellingen toe aan het local.settings.json-bestand in de Values verzameling.

Gebruik

De constructor van het kenmerk gebruikt de SQL-opdrachttekst, het opdrachttype, de parameters en de naam van de verbindingsreeks instelling. De opdracht kan een Transact-SQL-query (T-SQL) zijn met het opdrachttype System.Data.CommandType.Text of de naam van de opgeslagen procedure met het opdrachttype System.Data.CommandType.StoredProcedure. De naam van de verbindingsreeks-instelling komt overeen met de toepassingsinstelling (voor local.settings.json lokale ontwikkeling) die de verbindingsreeks bevat naar het Azure SQL- of SQL Server-exemplaar.

Query's die door de invoerbinding worden uitgevoerd, worden geparameteriseerd in Microsoft.Data.SqlClient om het risico van SQL-injectie te verminderen van de parameterwaarden die in de binding worden doorgegeven.

Als er een uitzondering optreedt wanneer een SQL-invoerbinding wordt uitgevoerd, wordt de functiecode niet uitgevoerd. Dit kan ertoe leiden dat er een foutcode wordt geretourneerd, zoals een HTTP-trigger die een 500-foutcode retourneert.

Volgende stappen