Condividi tramite


Panoramica degli attributi personalizzati dell'integrazione con CLR

Common Language Runtime (CLR) di .NET Framework consente l'uso di parole chiave descrittive, denominate attributi. Questi attributi forniscono informazioni aggiuntive per molti elementi quali metodi e classi. Gli attributi vengono salvati nell'assembly con i metadati dell'oggetto e possono essere usati per descrivere il codice ad altri strumenti di sviluppo o per influire sul comportamento di runtime all'interno di SQL Server.

Quando si registra una routine CLR con SQL Server, SQL Server deriva un set di proprietà sulla routine. Queste proprietà della routine determinano le funzionalità della routine, incluso se la routine può essere indicizzata. Ad esempio, l'impostazione della DataAccess proprietà su consente di accedere ai DataAccessKind.Read dati da SQL Server tabelle utente all'interno di una funzione CLR. Nell'esempio seguente viene illustrato un semplice caso in cui la proprietà è impostata per facilitare l'accesso DataAccess ai dati da una tabella utente 1.

using System;  
using System.Data;  
using System.Data.Sql;  
using System.Data.SqlTypes;  
using Microsoft.SqlServer.Server;  
using System.Data.SqlClient;  
  
public partial class UserDefinedFunctions  
{  
    [SqlFunction(DataAccess = DataAccessKind.Read)]  
    public static string func1()  
    {  
        // Open a connection and create a command  
        SqlConnection conn = new SqlConnection("context connection = true");  
        conn.Open();  
        SqlCommand cmd = conn.CreateCommand();  
        cmd.CommandText = "SELECT str_val FROM table1 WHERE int_val = 10";  
        // where table1 is a user table  
        // Execute this command   
        SqlDataReader rd = cmd.ExecuteReader();  
        // Set string ret_val to str_val returned from the query  
        string ret_val = rd.GetValue(0).ToString();  
        rd.Close();  
        return ret_val;  
    }  
}  
Imports System  
Imports System.Data  
Imports System.Data.Sql  
Imports System.Data.SqlTypes  
Imports Microsoft.SqlServer.Server  
Imports System.Data.SqlClient  
  
Public partial Class UserDefinedFunctions  
    <SqlFunction(DataAccess = DataAccessKind.Read)> _   
    Public Shared Function func1() As String  
        ' Open a connection and create a command  
        Dim conn As SqlConnection = New SqlConnection("context connection = true")   
        conn.Open()  
        Dim cmd As SqlCommand =  conn.CreateCommand()   
        cmd.CommandText = "SELECT str_val FROM table1 WHERE int_val = 10"  
        ' where table1 is a user table  
        ' Execute this command   
        Dim rd As SqlDataReader =  cmd.ExecuteReader()   
        ' Set string ret_val to str_val returned from the query  
        Dim ret_val As String =  rd.GetValue(0).ToString()   
        rd.Close()  
        Return ret_val  
    End Function  
End Class  

Per le routine Transact-SQL, SQL Server deriva le proprietà di routine direttamente dalla definizione di routine. Per le routine CLR, il server non analizza il corpo della routine per derivare queste proprietà. È invece possibile usare attributi personalizzati per le classi e i membri della classe implementati in un linguaggio .NET Framework.

Gli attributi personalizzati necessari per routine CLR, tipi definiti dall'utente e aggregazioni vengono definiti nello spazio dei nomi Microsoft.SqlServer.Server.

Vedere anche

Attributi personalizzati per routine CLR