Azure SQL-Eingabebindung für Azure Functions
Wenn eine Funktion ausgeführt wird, ruft die Azure SQL-Eingabebindung Daten aus einer Datenbank ab und übergibt sie an den Eingabeparameter der Funktion.
Informationen zu Setup- und Konfigurationsdetails finden Sie in der Übersicht.
Wichtig
In diesem Artikel werden Registerkarten verwendet, um mehrere Versionen des Node.js-Programmiermodells zu unterstützen. Das v4-Modell ist allgemein verfügbar und bietet JavaScript- und TypeScript-Entwicklern eine flexiblere und intuitivere Erfahrung. Weitere Informationen zur Funktionsweise des v4-Modells finden Sie im Azure Functions Node.js-Entwicklerhandbuch. Weitere Informationen zu den Unterschieden zwischen v3 und v4 finden Sie im Migrationshandbuch.
Beispiele
Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:
- Isoliertes Workermodell: Kompilierte C#-Funktion, die in einem Workerprozess ausgeführt wird, der von der Runtime isoliert ist. Ein isolierter Workerprozess ist erforderlich, um C#-Funktionen zu unterstützen, die in LTS- und Nicht-LTS-Versionen von .NET und .NET Framework ausgeführt werden.
- In-Process-Modell: Kompilierte C#-Funktion, die im gleichen Prozess wie die Functions-Runtime ausgeführt wird.
- C#-Skript: Wird hauptsächlich beim Erstellen von C#-Funktionen im Azure-Portal verwendet.
Wichtig
Die Unterstützung für das In-Process-Modell endet am 10. November 2026. Es wird dringend empfohlen, Ihre Apps zum isolierten Workermodell zu migrieren, um den vollständigen Support zu ermöglichen.
Weitere Beispiele für die Azure SQL-Eingabebindung sind im GitHub-Repository verfügbar.
Dieser Abschnitt enthält folgende Beispiele:
- HTTP-Trigger, Zeile nach ID aus Abfragezeichenfolge abrufen
- HTTP-Trigger, mehrere Zeilen aus Routendaten abrufen
- HTTP-Trigger, Zeilen löschen
Die Beispiele beziehen sich auf eine ToDoItem
-Klasse und eine entsprechende Datenbanktabelle:
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, Zeile nach ID aus Abfragezeichenfolge abrufen
Das folgende Beispiel zeigt eine C#-Funktion, die einen einzelnen Datensatz abruft. Die Funktion wird durch eine HTTP-Anforderung ausgelöst, die eine Abfragezeichenfolge verwendet, um die ID anzugeben. Diese ID wird verwendet, um einen Datensatz ToDoItem
mit der angegebenen Abfrage abzurufen.
Hinweis
Beim Wert für den HTTP-Abfragezeichenfolge-Parameter muss die Groß-/Kleinschreibung beachtet werden.
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, mehrere Zeilen aus Routenparameter abrufen
Das folgende Beispiel zeigt eine C#-Funktion, die von der Abfrage zurückgegebene Dokumente abruft. Die Funktion wird durch eine HTTP-Anforderung ausgelöst, die Routendaten verwendet, um den Wert eines Abfrageparameters anzugeben. Dieser Parameter wird verwendet, um die Datensätze ToDoItem
in der angegebenen Abfrage zu filtern.
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, Zeilen löschen
Im folgenden Beispiel wird eine C#-Funktion gezeigt, die eine gespeicherte Prozedur mit Eingabe aus dem Abfrageparameter für die HTTP-Anforderung ausführt.
Die gespeicherte Prozedur dbo.DeleteToDo
muss in der SQL-Datenbank erstellt werden. In diesem Beispiel löscht die gespeicherte Prozedur einen einzelnen Datensatz oder alle Datensätze abhängig vom Wert des Parameters.
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);
}
}
}
Weitere Beispiele für die Azure SQL-Eingabebindung sind im GitHub-Repository verfügbar.
Dieser Abschnitt enthält folgende Beispiele:
- HTTP-Trigger, mehrere Zeilen abrufen
- HTTP-Trigger, Zeile nach ID aus Abfragezeichenfolge abrufen
- HTTP-Trigger, Zeilen löschen
Die Beispiele beziehen sich auf eine ToDoItem
-Klasse (in einer getrennten Datei ToDoItem.java
) und eine entsprechende Datenbanktabelle:
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, mehrere Zeilen abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer Java-Funktion, die von einer HTTP-Anforderung ausgelöst wird und aus einer Abfrage liest und die Ergebnisse in der HTTP-Antwort zurückgibt.
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, Zeile nach ID aus Abfragezeichenfolge abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer Java-Funktion, die von einer HTTP-Anforderung ausgelöst wird, und liest aus einer Abfrage, die von einem Parameter aus der Abfragezeichenfolge gefiltert wird, und gibt die Zeile in der HTTP-Antwort zurück.
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, Zeilen löschen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer Java-Funktion, die von einer HTTP-Anforderung ausgelöst wird und eine gespeicherte Prozedur mit Eingabe aus dem HTTP-Anforderungsabfrageparameter ausführt.
Die gespeicherte Prozedur dbo.DeleteToDo
muss in der Datenbank erstellt werden. In diesem Beispiel löscht die gespeicherte Prozedur einen einzelnen Datensatz oder alle Datensätze abhängig vom Wert des Parameters.
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();
}
}
Weitere Beispiele für die Azure SQL-Eingabebindung sind im GitHub-Repository verfügbar.
Dieser Abschnitt enthält folgende Beispiele:
- HTTP-Trigger, mehrere Zeilen abrufen
- HTTP-Trigger, Zeile nach ID aus Abfragezeichenfolge abrufen
- HTTP-Trigger, Zeilen löschen
Die Beispiele beziehen sich auf eine Datenbanktabelle:
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, mehrere Zeilen abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung, die von einer HTTP-Anforderung ausgelöst wird und aus einer Abfrage liest und die Ergebnisse in der HTTP-Antwort zurückgibt.
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, Zeile nach ID aus Abfragezeichenfolge abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung, die von einer HTTP-Anforderung ausgelöst wird, und liest aus einer Abfrage, die von einem Parameter aus der Abfragezeichenfolge gefiltert wird, und gibt die Zeile in der HTTP-Antwort zurück.
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, Zeilen löschen
Das folgende Beispiel zeigt eine SQL-Eingabebindung, die von einer HTTP-Anforderung ausgelöst wird und eine gespeicherte Prozedur mit Eingabe aus dem HTTP-Anforderungsabfrageparameter ausführt.
Die gespeicherte Prozedur dbo.DeleteToDo
muss in der Datenbank erstellt werden. In diesem Beispiel löscht die gespeicherte Prozedur einen einzelnen Datensatz oder alle Datensätze abhängig vom Wert des Parameters.
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,
};
},
});
Weitere Beispiele für die Azure SQL-Eingabebindung sind im GitHub-Repository verfügbar.
Dieser Abschnitt enthält folgende Beispiele:
- HTTP-Trigger, mehrere Zeilen abrufen
- HTTP-Trigger, Zeile nach ID aus Abfragezeichenfolge abrufen
- HTTP-Trigger, Zeilen löschen
Die Beispiele beziehen sich auf eine Datenbanktabelle:
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, mehrere Zeilen abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer function.json Datei und eine PowerShell-Funktion, die von einer HTTP-Anforderung ausgelöst wird und aus einer Abfrage liest und die Ergebnisse in der HTTP-Antwort zurückgibt.
Das folgende Beispiel bindet Daten in der function.json-Datei:
{
"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"
}
Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.
Es folgt ein PowerShell-Beispielcode für die Funktion in der Datei 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-Trigger, Zeile nach ID aus Abfragezeichenfolge abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer PowerShell-Funktion, die von einer HTTP-Anforderung ausgelöst wird, und liest aus einer Abfrage, die von einem Parameter aus der Abfragezeichenfolge gefiltert wird, und gibt die Zeile in der HTTP-Antwort zurück.
Das folgende Beispiel bindet Daten in der function.json-Datei:
{
"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"
}
Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.
Es folgt ein PowerShell-Beispielcode für die Funktion in der Datei 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-Trigger, Zeilen löschen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer function.json Datei und eine PowerShell-Funktion, die von einer HTTP-Anforderung ausgelöst wird und eine gespeicherte Prozedur mit Eingabe aus dem HTTP-Anforderungsabfrageparameter ausführt.
Die gespeicherte Prozedur dbo.DeleteToDo
muss in der Datenbank erstellt werden. In diesem Beispiel löscht die gespeicherte Prozedur einen einzelnen Datensatz oder alle Datensätze abhängig vom Wert des Parameters.
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"
}
Weitere Informationen zu diesen Eigenschaften finden Sie im Abschnitt Konfiguration.
Es folgt ein PowerShell-Beispielcode für die Funktion in der Datei 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
})
Weitere Beispiele für die Azure SQL-Eingabebindung sind im GitHub-Repository verfügbar.
Dieser Abschnitt enthält folgende Beispiele:
- HTTP-Trigger, mehrere Zeilen abrufen
- HTTP-Trigger, Zeile nach ID aus Abfragezeichenfolge abrufen
- HTTP-Trigger, Zeilen löschen
Die Beispiele beziehen sich auf eine Datenbanktabelle:
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, mehrere Zeilen abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer function.json Datei und eine Python-Funktion, die von einer HTTP-Anforderung ausgelöst wird und aus einer Abfrage liest und die Ergebnisse in der HTTP-Antwort zurückgibt.
Nachfolgend sehen Sie Python-Beispielcode für die function_app.py-Datei:
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, Zeile nach ID aus Abfragezeichenfolge abrufen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer Python-Funktion, die von einer HTTP-Anforderung ausgelöst wird, und liest aus einer Abfrage, die von einem Parameter aus der Abfragezeichenfolge gefiltert wird, und gibt die Zeile in der HTTP-Antwort zurück.
Nachfolgend sehen Sie Python-Beispielcode für die function_app.py-Datei:
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, Zeilen löschen
Das folgende Beispiel zeigt eine SQL-Eingabebindung in einer function.json Datei und eine Python-Funktion, die von einer HTTP-Anforderung ausgelöst wird und eine gespeicherte Prozedur mit Eingabe aus dem HTTP-Anforderungsabfrageparameter ausführt.
Die gespeicherte Prozedur dbo.DeleteToDo
muss in der Datenbank erstellt werden. In diesem Beispiel löscht die gespeicherte Prozedur einen einzelnen Datensatz oder alle Datensätze abhängig vom Wert des Parameters.
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
Nachfolgend sehen Sie Python-Beispielcode für die function_app.py-Datei:
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"
)
Attribute
Die C#-Bibliothek verwendet das Attribut SqlAttribute, um die SQL-Bindungen für die Funktion zu deklarieren, die die folgenden Eigenschaften hat:
Attributeigenschaft | BESCHREIBUNG |
---|---|
CommandText | Erforderlich. Der Transact-SQL-Abfragebefehl oder der Name der gespeicherten Prozedur, die von der Bindung ausgeführt wird. |
ConnectionStringSetting | Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, für die die Abfrage oder die gespeicherte Prozedur ausgeführt wird. Dieser Wert ist nicht die tatsächliche Verbindungszeichenfolge und muss stattdessen in den Namen einer Umgebungsvariablen aufgelöst werden. |
CommandType | Erforderlich. Ein CommandType-Wert, der Text für eine Abfrage und StoredProcedure für eine gespeicherte Prozedur ist. |
Parameter | Optional. Null oder mehr Parameterwerte, die während der Ausführung als einzelne Zeichenfolge an den Befehl übergeben werden. Muss dem Format @param1=param1,@param2=param2 folgen. Weder der Parametername noch der Parameterwert können ein Komma (, ) oder ein Gleichheitszeichen (= ) enthalten. |
Anmerkungen
Verwenden Sie in der Laufzeitbibliothek für Java-Funktionen die Anmerkung @SQLInput
(com.microsoft.azure.functions.sql.annotation.SQLInput
) für Parameter, deren Wert aus Azure SQL stammt. Diese Anmerkung unterstützt die folgenden Elemente:
Element | BESCHREIBUNG |
---|---|
commandText | Erforderlich. Der Transact-SQL-Abfragebefehl oder der Name der gespeicherten Prozedur, die von der Bindung ausgeführt wird. |
connectionStringSetting | Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, für die die Abfrage oder die gespeicherte Prozedur ausgeführt wird. Dieser Wert ist nicht die tatsächliche Verbindungszeichenfolge und muss stattdessen in den Namen einer Umgebungsvariablen aufgelöst werden. |
commandType | Erforderlich. Ein Wert vom Typ CommandType, der Text (für eine Abfrage) oder StoredProcedure (für eine gespeicherte Prozedur) lautet. |
name | Erforderlich. Der eindeutige Name der Funktionsbindung. |
parameters | Optional. Null oder mehr Parameterwerte, die während der Ausführung als einzelne Zeichenfolge an den Befehl übergeben werden. Muss dem Format @param1=param1,@param2=param2 folgen. Weder der Parametername noch der Parameterwert können ein Komma (, ) oder ein Gleichheitszeichen (= ) enthalten. |
Konfiguration
In der folgenden Tabelle werden die Eigenschaften erläutert, die Sie für das options
-Objekt festlegen können, das an die input.sql()
-Methode übergeben wurde.
Eigenschaft | Beschreibung |
---|---|
commandText | Erforderlich. Der Transact-SQL-Abfragebefehl oder der Name der gespeicherten Prozedur, die von der Bindung ausgeführt wird. |
connectionStringSetting | Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, für die die Abfrage oder die gespeicherte Prozedur ausgeführt wird. Dieser Wert ist nicht die tatsächliche Verbindungszeichenfolge und muss stattdessen in den Namen einer Umgebungsvariablen aufgelöst werden. Optionale Schlüsselwörter im Verbindungszeichenfolgewert sind verfügbar, um die SQL-Bindungskonnektivität zu verfeinern. |
commandType | Erforderlich. Ein CommandType-Wert, der Text für eine Abfrage und StoredProcedure für eine gespeicherte Prozedur ist. |
parameters | Optional. Null oder mehr Parameterwerte, die während der Ausführung als einzelne Zeichenfolge an den Befehl übergeben werden. Muss dem Format @param1=param1,@param2=param2 folgen. Weder der Parametername noch der Parameterwert können ein Komma (, ) oder ein Gleichheitszeichen (= ) enthalten. |
Konfiguration
Die folgende Tabelle gibt Aufschluss über die Bindungskonfigurationseigenschaften, die Sie in der Datei function.json festlegen.
function.json-Eigenschaft | BESCHREIBUNG |
---|---|
type | Erforderlich. Muss auf sql festgelegt sein. |
direction | Erforderlich. Muss auf in festgelegt sein. |
name | Erforderlich. Der Name der Variablen, die die Abfrageergebnisse im Funktionscode darstellt. |
commandText | Erforderlich. Der Transact-SQL-Abfragebefehl oder der Name der gespeicherten Prozedur, die von der Bindung ausgeführt wird. |
connectionStringSetting | Erforderlich. Der Name einer App-Einstellung, die die Verbindungszeichenfolge für die Datenbank enthält, für die die Abfrage oder die gespeicherte Prozedur ausgeführt wird. Dieser Wert ist nicht die tatsächliche Verbindungszeichenfolge und muss stattdessen in den Namen einer Umgebungsvariablen aufgelöst werden. Optionale Schlüsselwörter im Verbindungszeichenfolgewert sind verfügbar, um die SQL-Bindungskonnektivität zu verfeinern. |
commandType | Erforderlich. Ein CommandType-Wert, der Text für eine Abfrage und StoredProcedure für eine gespeicherte Prozedur ist. |
parameters | Optional. Null oder mehr Parameterwerte, die während der Ausführung als einzelne Zeichenfolge an den Befehl übergeben werden. Muss dem Format @param1=param1,@param2=param2 folgen. Weder der Parametername noch der Parameterwert können ein Komma (, ) oder ein Gleichheitszeichen (= ) enthalten. |
Wenn Sie die Entwicklung lokal ausführen, fügen Sie Ihre Anwendungseinstellungen in der Datei local.settings.json in der Values
-Sammlung hinzu.
Verwendung
Der Konstruktor des Attributs verwendet den SQL-Befehlstext, den Befehlstyp, Parameter und den Namen der Verbindungszeichenfolgeneinstellung. Der Befehl kann eine Transact-SQL-Abfrage (T-SQL) mit dem Befehlstyp System.Data.CommandType.Text
oder dem Namen der gespeicherten Prozedur mit dem Befehlstyp System.Data.CommandType.StoredProcedure
sein. Der Name der Verbindungszeichenfolgeneinstellung entspricht der Anwendungseinstellung (in local.settings.json
für lokale Entwicklung), die die Verbindungszeichenfolge für die Azure SQL- oder SQL Server-Instanz enthält.
Von der Eingabebindung ausgeführte Abfragen werden in Microsoft.Data.SqlClient parametrisiert, um das Risiko einer SQL-Einschleusung durch die an die Bindung übergebenen Parameterwerte zu verringern.
Wenn eine Ausnahme auftritt, wenn eine SQL-Eingabebindung ausgeführt wird, wird der Funktionscode nicht ausgeführt. Das kann dazu führen, dass ein Fehlercode zurückgegeben wird, z. B. ein HTTP-Trigger, der einen Fehlercode 500 zurückgibt.