Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrierenDieser Browser wird nicht mehr unterstützt.
Führen Sie ein Upgrade auf Microsoft Edge aus, um die neuesten Funktionen, Sicherheitsupdates und technischen Support zu nutzen.
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.
Eine C#-Funktion kann mit einem der folgenden C#-Modi erstellt werden:
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:
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
);
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());
}
}
}
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);
}
}
}
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:
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
);
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();
}
}
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();
}
}
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:
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
);
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,
};
},
});
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,
};
},
});
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:
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
);
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
})
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
})
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:
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
);
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"
)
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"
)
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"
)
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. |
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. |
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. |
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.
Die Bindungsdefinition enthält den SQL-Befehlstext, den Befehlstyp, parameter und den namen der Verbindungszeichenfolge Einstellung. 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.
Wichtig
Um optimale Sicherheit zu gewährleisten, sollten Sie Microsoft Entra-ID mit verwalteten Identitäten für Verbindungen zwischen Funktionen und Azure SQL-Datenbank verwenden. Verwaltete Identitäten sorgen dafür, dass Ihre App sicherer wird, indem geheime Schlüssel aus Ihren Anwendungsbereitstellungen wie Anmeldeinformationen in den Verbindungszeichenfolge s, Servernamen und verwendeten Ports entfernt werden. In diesem Lernprogramm erfahren Sie, wie Sie verwaltete Identitäten verwenden, eine Funktions-App mit Azure SQL mit verwalteter Identität und SQL-Bindungen verbinden.
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.
Ereignisse
17. März, 21 Uhr - 21. März, 10 Uhr
Nehmen Sie an der Meetup-Serie teil, um skalierbare KI-Lösungen basierend auf realen Anwendungsfällen mit Mitentwicklern und Experten zu erstellen.
Jetzt registrieren