El segundo parámetro opcional del método GetSchema son las restricciones que se usan para limitar la cantidad de información de esquema devuelta. Este parámetro se pasa al método GetSchema como una matriz de cadenas. La posición en la matriz determina los valores que puede pasar, y es equivalente al número de restricciones.
Por ejemplo, en la tabla siguiente se describen las restricciones que admite la colección de esquemas "Tables" mediante el proveedor de datos SqlClient de Microsoft para SQL Server. Las restricciones adicionales para las colecciones de esquemas de SQL Server se muestran al final de este tema.
Nombre de la restricción
Nombre de parámetro
Valor predeterminado de la restricción
Número de restricciones
Catálogo
@Catalog
TABLE_CATALOG
1
Propietario
@Owner
TABLE_SCHEMA
2
Tabla
@Name
TABLE_NAME
3
TableType
@TableType
TABLE_TYPE
4
Especificación de valores de restricción
Para utilizar una de las restricciones de la colección de esquemas "Tables", basta con crear una matriz de cadenas con cuatro elementos y, después, colocar un valor en el elemento que coincida con el número de restricción. Por ejemplo, para restringir las tablas devueltas por el método GetSchema solo a las del esquema "Sales", establezca el segundo elemento de la matriz en "Sales" antes de pasarlo al método GetSchema.
Nota
Las colecciones de restricciones para SqlClient tienen una columna ParameterName adicional. La columna de valor predeterminado de restricción sigue ahí para la compatibilidad con versiones anteriores, pero actualmente se omite. Para reducir el riesgo de un ataque de inyección de SQL al especificar valores de restricción, es necesario utilizar consultas parametrizadas en lugar de sustitución de cadenas.
El número de elementos de la matriz debe ser menor o igual que el número de restricciones admitidas en la colección de esquemas especificada o se iniciará una ArgumentException. Puede haber un número de restricciones inferior al máximo. Se supone que las restricciones que faltan serán nulas (sin restricciones).
Puede consultar el proveedor de datos SqlClient de Microsoft para SQL Server a fin de determinar la lista de restricciones admitidas mediante la llamada al método GetSchema con el nombre de la colección de esquemas con restricciones, que es "Restrictions". Esto devolverá una DataTable con una lista de los nombres de colecciones, los nombres de restricciones, los valores predeterminados de restricción y los números de restricciones.
Ejemplo
En los ejemplos siguientes se muestra cómo usar el método GetSchema de la clase SqlConnection del proveedor de datos SqlClient de Microsoft para SQL Server a fin de recuperar información de esquema de todas las tablas contenidas en la base de datos de ejemplo AdventureWorks, y para restringir la información devuelta solo a las tablas del esquema "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("============================");
}
}
}
Restricciones de esquema de SQL Server
En la tabla siguiente se muestran las restricciones de las colecciones de esquemas de SQL Server.