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.