Azure İşlevleri için Azure SQL giriş bağlaması

Bir işlev çalıştırıldığında, Azure SQL giriş bağlaması veritabanından verileri alır ve işlevin giriş parametresine geçirir.

Kurulum ve yapılandırma ayrıntıları hakkında bilgi için genel bakışa bakın.

Önemli

Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.

Örnekler

C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:

  • Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir.
  • İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi.
  • C# betiği: Öncelikle Azure portalında C# işlevleri oluşturduğunuzda kullanılır.

Önemli

İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.

GitHub deposunda Azure SQL giriş bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir ToDoItem sınıfa ve buna karşılık gelen bir veritabanı tablosuna başvurur:

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 tetikleyicisi, sorgu dizesinden kimliğine göre satır alma

Aşağıdaki örnekte tek bir kayıt alan bir C# işlevi gösterilmektedir. İşlev, kimliği belirtmek için sorgu dizesi kullanan bir HTTP isteği tarafından tetikleniyor. Bu kimlik, belirtilen sorguya sahip bir ToDoItem kaydı almak için kullanılır.

Not

HTTP sorgu dizesi parametresi büyük/küçük harfe duyarlıdır.

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 tetikleyicisi, yol parametresinden birden çok satır alma

Aşağıdaki örnekte, sorgu tarafından döndürülen belgeleri alan bir C# işlevi gösterilmektedir. İşlev, sorgu parametresinin değerini belirtmek için yönlendirme verilerini kullanan bir HTTP isteği tarafından tetikleniyor. Bu parametre, belirtilen sorgudaki ToDoItem kayıtları filtrelemek için kullanılır.

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 tetikleyicisi, satırları silme

Aşağıdaki örnekte, HTTP isteği sorgu parametresinden alınan girişle saklı yordamı yürüten bir C# işlevi gösterilmektedir.

Saklı yordam dbo.DeleteToDo SQL veritabanında oluşturulmalıdır. Bu örnekte saklı yordam, parametrenin değerine bağlı olarak tek bir kaydı veya tüm kayıtları siler.

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

GitHub deposunda Azure SQL giriş bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir sınıfa (ayrı bir ToDoItem dosyada ToDoItem.java) ve buna karşılık gelen bir veritabanı tablosuna başvurur:

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 tetikleyicisi, birden çok satır alma

Aşağıdaki örnekte, http isteği tarafından tetiklenen ve sorgudan okunan ve sonuçları HTTP yanıtında döndüren bir Java işlevindeki SQL giriş bağlaması gösterilmektedir.

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 tetikleyicisi, sorgu dizesinden kimliğine göre satır alma

Aşağıdaki örnekte, HTTP isteği tarafından tetiklenen ve sorgu dizesinden bir parametreye göre filtrelenmiş bir sorgudan okunan ve HTTP yanıtında satırı döndüren bir Java işlevindeki SQL giriş bağlaması gösterilmektedir.

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 tetikleyicisi, satırları silme

Aşağıdaki örnekte, HTTP isteği tarafından tetiklenen ve HTTP isteği sorgu parametresinden giriş içeren bir saklı yordam yürüten bir Java işlevindeki SQL giriş bağlaması gösterilmektedir.

Saklı yordam dbo.DeleteToDo veritabanında oluşturulmalıdır. Bu örnekte saklı yordam, parametrenin değerine bağlı olarak tek bir kaydı veya tüm kayıtları siler.

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

GitHub deposunda Azure SQL giriş bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir veritabanı tablosuna başvurur:

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 tetikleyicisi, birden çok satır alma

Aşağıdaki örnekte, HTTP isteği tarafından tetiklenen ve sorgudan okunan ve HTTP yanıtında sonuçları döndüren bir SQL giriş bağlaması gösterilmektedir.

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,
        };
    },
});
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 tetikleyicisi, satırları silme

Aşağıdaki örnekte, BIR HTTP isteği tarafından tetiklenen ve HTTP isteği sorgu parametresinden giriş içeren bir saklı yordam yürüten bir SQL giriş bağlaması gösterilmektedir.

Saklı yordam dbo.DeleteToDo veritabanında oluşturulmalıdır. Bu örnekte saklı yordam, parametrenin değerine bağlı olarak tek bir kaydı veya tüm kayıtları siler.

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

GitHub deposunda Azure SQL giriş bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir veritabanı tablosuna başvurur:

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 tetikleyicisi, birden çok satır alma

Aşağıdaki örnekte, bir function.json dosyasındaki SQL giriş bağlaması ve HTTP isteği tarafından tetiklenen ve sorgudan okunan ve SONUÇLARı HTTP yanıtında döndüren bir PowerShell işlevi gösterilmektedir.

Function.json dosyasındaki verileri bağlama aşağıdadır:

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

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda, dosyadaki işlev için örnek PowerShell kodu verilmiştir 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 tetikleyicisi, sorgu dizesinden kimliğine göre satır alma

Aşağıdaki örnekte, PowerShell işlevinde HTTP isteği tarafından tetiklenen ve sorgu dizesinden bir parametreye göre filtrelenmiş bir sorgudan okunan ve HTTP yanıtında satırı döndüren bir SQL giriş bağlaması gösterilmektedir.

Function.json dosyasındaki verileri bağlama aşağıdadır:

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

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda, dosyadaki işlev için örnek PowerShell kodu verilmiştir 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 tetikleyicisi, satırları silme

Aşağıdaki örnekte, bir function.json dosyasındaki SQL giriş bağlaması ve HTTP isteği tarafından tetiklenen ve HTTP isteği sorgu parametresinden giriş içeren bir saklı yordam yürüten bir PowerShell işlevi gösterilmektedir.

Saklı yordam dbo.DeleteToDo veritabanında oluşturulmalıdır. Bu örnekte saklı yordam, parametrenin değerine bağlı olarak tek bir kaydı veya tüm kayıtları siler.

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

Yapılandırma bölümünde bu özellikler açıklanır.

Aşağıda, dosyadaki işlev için örnek PowerShell kodu verilmiştir 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
})

GitHub deposunda Azure SQL giriş bağlaması için daha fazla örnek mevcuttur.

Bu bölüm aşağıdaki örnekleri içerir:

Örnekler bir veritabanı tablosuna başvurur:

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 tetikleyicisi, birden çok satır alma

Aşağıdaki örnekte, bir function.json dosyasındaki SQL giriş bağlaması ve BIR HTTP isteği tarafından tetiklenen ve sorgudan okuyan ve HTTP yanıtında sonuçları döndüren bir Python işlevi gösterilmektedir.

aşağıda function_app.py dosyası için örnek python kodu verilmiştir:

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 tetikleyicisi, sorgu dizesinden kimliğine göre satır alma

Aşağıdaki örnekte, Python işlevinde HTTP isteği tarafından tetiklenen ve sorgu dizesindeki bir parametreye göre filtrelenmiş bir sorgudan okunan ve HTTP yanıtında satırı döndüren bir SQL giriş bağlaması gösterilmektedir.

aşağıda function_app.py dosyası için örnek python kodu verilmiştir:

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 tetikleyicisi, satırları silme

Aşağıdaki örnekte, bir function.json dosyasındaki SQL giriş bağlaması ve HTTP isteği tarafından tetiklenen ve HTTP isteği sorgu parametresinden giriş içeren bir saklı yordam yürüten bir Python işlevi gösterilmektedir.

Saklı yordam dbo.DeleteToDo veritabanında oluşturulmalıdır. Bu örnekte saklı yordam, parametrenin değerine bağlı olarak tek bir kaydı veya tüm kayıtları siler.

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

aşağıda function_app.py dosyası için örnek python kodu verilmiştir:

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

Özellikler

C# kitaplığı, aşağıdaki özelliklere sahip olan işlevdeki SQL bağlamalarını bildirmek için SqlAttribute özniteliğini kullanır:

Öznitelik özelliği Açıklama
CommandText Gerekli. Transact-SQL sorgu komutu veya bağlama tarafından yürütülen saklı yordamın adı.
ConnectionStringSetting Gerekli. Sorgunun veya saklı yordamın yürütülmekte olduğu veritabanı için bağlantı dizesi içeren bir uygulama ayarının adı. Bu değer gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkeni adına çözümlenmelidir.
CommandType Gerekli. Sorgu için Metin ve saklı yordam için StoredProcedure olan CommandType değeri.
Parametreler isteğe bağlı. Yürütme sırasında tek bir dize olarak komuta geçirilen sıfır veya daha fazla parametre değeri. biçimine @param1=param1,@param2=param2uygun olmalıdır. Parametre adı veya parametre değeri virgül (,) veya eşittir işareti (=) içeremez.

Ek Açıklamalar

Java işlevleri çalışma zamanı kitaplığında, değeri Azure SQL'den gelen parametrelerde ek açıklamayı (com.microsoft.azure.functions.sql.annotation.SQLInput) kullanın@SQLInput. Bu ek açıklama aşağıdaki öğeleri destekler:

Öğe Açıklama
commandText Gerekli. Transact-SQL sorgu komutu veya bağlama tarafından yürütülen saklı yordamın adı.
connectionStringSetting Gerekli. Sorgunun veya saklı yordamın yürütülmekte olduğu veritabanı için bağlantı dizesi içeren bir uygulama ayarının adı. Bu değer gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkeni adına çözümlenmelidir.
commandType Gerekli. Sorgu için "Metin" ve saklı yordam için "StoredProcedure" olan CommandType değeri.
ad Gerekli. İşlev bağlamasının benzersiz adı.
parametreler isteğe bağlı. Yürütme sırasında tek bir dize olarak komuta geçirilen sıfır veya daha fazla parametre değeri. biçimine @param1=param1,@param2=param2uygun olmalıdır. Parametre adı veya parametre değeri virgül (,) veya eşittir işareti (=) içeremez.

Yapılandırma

Aşağıdaki tabloda, yöntemine geçirilen input.sql() nesnede options ayarlayabileceğiniz özellikler açıklanmaktadır.

Özellik Açıklama
commandText Gerekli. Transact-SQL sorgu komutu veya bağlama tarafından yürütülen saklı yordamın adı.
connectionStringSetting Gerekli. Sorgunun veya saklı yordamın yürütülmekte olduğu veritabanı için bağlantı dizesi içeren bir uygulama ayarının adı. Bu değer gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkeni adına çözümlenmelidir. sql bağlamaları bağlantısını daraltmak için bağlantı dizesi değerindeki isteğe bağlı anahtar sözcükler kullanılabilir.
commandType Gerekli. Sorgu için Metin ve saklı yordam için StoredProcedure olan CommandType değeri.
parametreler isteğe bağlı. Yürütme sırasında tek bir dize olarak komuta geçirilen sıfır veya daha fazla parametre değeri. biçimine @param1=param1,@param2=param2uygun olmalıdır. Parametre adı veya parametre değeri virgül (,) veya eşittir işareti (=) içeremez.

Yapılandırma

Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.

function.json özelliği Açıklama
type Gerekli. olarak ayarlanmalıdır sql.
direction Gerekli. olarak ayarlanmalıdır in.
ad Gerekli. Sorguyu temsil eden değişkenin adı işlev koduyla sonuç alır.
commandText Gerekli. Transact-SQL sorgu komutu veya bağlama tarafından yürütülen saklı yordamın adı.
connectionStringSetting Gerekli. Sorgunun veya saklı yordamın yürütülmekte olduğu veritabanı için bağlantı dizesi içeren bir uygulama ayarının adı. Bu değer gerçek bağlantı dizesi değildir ve bunun yerine bir ortam değişkeni adına çözümlenmelidir. sql bağlamaları bağlantısını daraltmak için bağlantı dizesi değerindeki isteğe bağlı anahtar sözcükler kullanılabilir.
commandType Gerekli. Sorgu için Metin ve saklı yordam için StoredProcedure olan CommandType değeri.
parametreler isteğe bağlı. Yürütme sırasında tek bir dize olarak komuta geçirilen sıfır veya daha fazla parametre değeri. biçimine @param1=param1,@param2=param2uygun olmalıdır. Parametre adı veya parametre değeri virgül (,) veya eşittir işareti (=) içeremez.

Yerel olarak geliştirme yaparken uygulama ayarlarınızı koleksiyondaki local.settings.json dosyasına Values ekleyin.

Kullanım

Özniteliğin oluşturucusunun SQL komut metni, komut türü, parametreler ve bağlantı dizesi ayar adı alır. Komut, komut türüne sahip bir Transact-SQL (T-SQL) sorgusu veya komut türüne System.Data.CommandType.Text System.Data.CommandType.StoredProceduresahip saklı yordam adı olabilir. bağlantı dizesi ayarı adı, Azure SQL veya SQL Server örneğine bağlantı dizesi içeren uygulama ayarına (local.settings.jsonyerel geliştirme için) karşılık gelir.

Giriş bağlaması tarafından yürütülen sorgular, bağlamaya geçirilen parametre değerlerinden SQL ekleme riskini azaltmak için Microsoft.Data.SqlClient'da parametrelendirilir.

SQL giriş bağlaması yürütürken bir özel durum oluşursa işlev kodu yürütülemez. Bu, 500 hata kodu döndüren HTTP tetikleyicisi gibi bir hata kodunun döndürülmesiyle sonuçlanabilir.

Sonraki adımlar