Udostępnij za pośrednictwem


Omówienie integracji CLR atrybutów niestandardowych

Common language runtime (CLR) z .NET Framework pozwala na używanie opisowych słów kluczowych nazywanych atrybutami.Atrybuty te zawierają dodatkowe informacje dla wielu elementów, takich jak metody i klas.Atrybuty są zapisywane w wirtualny plik dziennika metadane obiektu i mogą być używane do opisywania kodu do innych narzędzi programistycznych lub wpływać na zachowanie runtime wewnątrz SQL Server.

Podczas rejestrowania rutynowych CLR z SQL Server, SQL Server pochodzi z zestaw właściwości dotyczące rutynowych.Te właściwości rutynowych określają możliwości rutynowych, łącznie z rutynowych mogą być indeksowane.Na przykład, ustawienie DataAccess Właściwość DataAccessKind.Read pozwala korzystać z danych z SQL Server tabele użytkowników wewnątrz funkcja CLR.W poniższym przykładzie pokazano prostym przypadek, w którym DataAccess właściwość jest zestaw w celu ułatwienia dostępu do danych z tabela użytkownika tabela1.

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

Dla Transact-SQL procedur, SQL Server pochodzi rutynowych właściwości bezpośrednio z rutynowych definicji.Procedur CLR serwera nie analizuje treść rutynowych do uzyskania tych właściwości.Zamiast tego można użyć niestandardowych atrybutów dla klasy i członkowie klasy zaimplementowane w .NET Framework języka.

Atrybuty niestandardowe potrzebne dla procedur CLR, typy zdefiniowane przez użytkownika i agregatów są zdefiniowane w Microsoft.SqlServer.Server obszaru nazw.