Condividi tramite


Restrizioni schema

Si applica a: .NET Framework .NET .NET Standard

Scarica ADO.NET

Il secondo parametro facoltativo del metodo GetSchema è rappresentato dalle restrizioni usate per limitare la quantità di informazioni sullo schema restituite e viene passato al metodo GetSchema come matrice di stringhe. La posizione nella matrice determina i valori che è possibile passare ed equivale al numero della restrizione.

Ad esempio, nella tabella seguente sono descritte le restrizioni supportate dalla raccolta di schemi "Tables" usando il provider di dati Microsoft SqlClient per SQL Server. Restrizioni aggiuntive per le raccolte di schemi di SQL Server vengono indicate alla fine di questo argomento.

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog TABLE_CATALOG 1
Proprietario @Owner TABLE_SCHEMA 2
Tabella @Name TABLE_NAME 3
TableType @TableType TABLE_TYPE 4

Specifica dei valori di restrizione

Per usare una delle restrizioni della raccolta di schemi "Tables", è sufficiente creare una matrice di stringa con quattro elementi, quindi posizionare un valore nell'elemento che corrisponde al numero della restrizione. Ad esempio, per limitare le tabelle restituite dal metodo GetSchema solo a quelle incluse nello schema "Sales", impostare il secondo elemento della matrice su "Sales" prima di passarlo al metodo GetSchema.

Nota

  • Le raccolte di restrizioni per SqlClient hanno una colonna ParameterName aggiuntiva. La colonna di restrizione predefinita è ancora disponibile per garantire la compatibilità con le versioni precedenti, ma attualmente è ignorata. Le query con parametri anziché la sostituzione di stringhe devono essere usate per ridurre al minimo il rischio di un attacco SQL injection quando si specificano valori di restrizione.
  • Il numero di elementi nella matrice deve essere inferiore o uguale al numero di restrizioni supportato per la raccolta di schemi specificato, in caso contrario verrà generato un tipo ArgumentException. Il numero di restrizioni può essere inferiore al numero massimo consentito. Le restrizioni mancanti verranno considerate null (senza restrizioni).

È possibile eseguire una query nel provider di dati Microsoft SqlClient per SQL Server per determinare l'elenco delle restrizioni supportate chiamando il metodo GetSchema con il nome della raccolta di schemi delle restrizioni, ovvero "Restrictions". In questo modo verrà restituito un oggetto DataTable con un elenco dei nomi delle raccolte, i nomi delle restrizioni, i valori di restrizione predefiniti e i numeri delle restrizioni.

Esempio

Negli esempi seguenti viene illustrato come usare il metodo GetSchema del provider di dati Microsoft SqlClient per la classe SqlConnection di SQL Server per recuperare informazioni sullo schema relative a tutte le tabelle contenute nel database di esempio AdventureWorks e per limitare le informazioni restituite alle sole tabelle incluse nello schema "Sales":

using System;
using System.Data;
using Microsoft.Data.SqlClient;

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "Data Source = localhost; Integrated Security = true; Initial Catalog = AdventureWorks";
        
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();

            // Specify the restrictions.  
            string[] restrictions = new string[4];
            restrictions[1] = "Sales";
            System.Data.DataTable table = connection.GetSchema("Tables", restrictions);

            // Display the contents of the table.  
            DisplayData(table);
            Console.WriteLine("Press any key to continue.");
            Console.ReadKey();
        }
    }

    private static void DisplayData(System.Data.DataTable table)
    {
        foreach (System.Data.DataRow row in table.Rows)
        {
            foreach (System.Data.DataColumn col in table.Columns)
            {
                Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);
            }
            Console.WriteLine("============================");
        }
    }
}

Restrizioni per gli schemi di SQL Server

Nelle tabelle seguenti sono incluse le restrizioni per le raccolte di schemi di SQL Server.

Utenti

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
User_Name @Name name 1

Database

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Nome @Name Nome 1

Tabelle

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog TABLE_CATALOG 1
Proprietario @Owner TABLE_SCHEMA 2
Tabella @Name TABLE_NAME 3
TableType @TableType TABLE_TYPE 4

Colonne

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog TABLE_CATALOG 1
Proprietario @Owner TABLE_SCHEMA 2
Tabella @Table TABLE_NAME 3
Istogramma @Column COLUMN_NAME 4

StructuredTypeMembers

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog TABLE_CATALOG 1
Proprietario @Owner TABLE_SCHEMA 2
Tabella @Table TABLE_NAME 3
Istogramma @Column COLUMN_NAME 4

Visualizzazioni

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog TABLE_CATALOG 1
Proprietario @Owner TABLE_SCHEMA 2
Tabella @Table TABLE_NAME 3

ViewColumns

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog VIEW_CATALOG 1
Proprietario @Owner VIEW_SCHEMA 2
Tabella @Table VIEW_NAME 3
Istogramma @Column COLUMN_NAME 4

ProcedureParameters

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog SPECIFIC_CATALOG 1
Proprietario @Owner SPECIFIC_SCHEMA 2
Nome @Name SPECIFIC_NAME 3
Parametro @Parameter PARAMETER_NAME 4

Procedure

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog SPECIFIC_CATALOG 1
Proprietario @Owner SPECIFIC_SCHEMA 2
Nome @Name SPECIFIC_NAME 3
Type @Type ROUTINE_TYPE 4

IndexColumns

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog db_name() 1
Proprietario @Owner user_name() 2
Tabella @Table o.name 3
ConstraintName @ConstraintName x.name 4
Istogramma @Column c.name 5

Indici

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog db_name() 1
Proprietario @Owner user_name() 2
Tabella @Table o.name 3

UserDefinedTypes

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
assembly_name @AssemblyName assemblies.name 1
udt_name @UDTName types.assembly_class 2

ForeignKeys

Nome della restrizione Nome parametro Impostazione predefinita della restrizione Numero della restrizione
Catalogo @Catalog CONSTRAINT_CATALOG 1
Proprietario @Owner CONSTRAINT_SCHEMA 2
Tabella @Table TABLE_NAME 3
Nome @Name CONSTRAINT_NAME 4

Vedi anche