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.
Belangrijk
De ondersteuning wordt beëindigd voor het in-process model op 10 november 2026. We raden u ten zeerste aan uw apps te migreren naar het geïsoleerde werkrolmodel voor volledige ondersteuning.
Meer voorbeelden voor de Azure SQL-invoerbinding zijn beschikbaar in de GitHub-opslagplaats.
Deze sectie bevat de volgende voorbeelden:
- HTTP-trigger, rij ophalen op id uit queryreeks
- HTTP-trigger, meerdere rijen ophalen uit routegegevens
- HTTP-trigger, rijen verwijderen
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:
- HTTP-trigger, meerdere rijen ophalen
- HTTP-trigger, rij ophalen op id uit queryreeks
- HTTP-trigger, rijen verwijderen
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:
- HTTP-trigger, meerdere rijen ophalen
- HTTP-trigger, rij ophalen op id uit queryreeks
- HTTP-trigger, rijen verwijderen
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:
- HTTP-trigger, meerdere rijen ophalen
- HTTP-trigger, rij ophalen op id uit queryreeks
- HTTP-trigger, rijen verwijderen
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:
- HTTP-trigger, meerdere rijen ophalen
- HTTP-trigger, rij ophalen op id uit queryreeks
- HTTP-trigger, rijen verwijderen
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=param2 volgen. 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=param2 volgen. 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=param2 volgen. 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=param2 volgen. 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.