El segundo parámetro opcional del método GetSchema
son las restricciones que se utilizan para limitar la cantidad de información de esquema devuelta. 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" utilizando el proveedor de datos .NET Framework para SQL Server. Las restricciones adicionales para las colecciones de esquemas de SQL Server aparecen al final de este artículo.
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 |
TipoDeTabla |
@TableType |
TIPO_DE_TABLA |
4 |
Especificación de los 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 con restricciones para SqlClient
y OracleClient
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.
Nota
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 un proveedor administrado de .NET Framework para 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 utilizar el método GetSchema del proveedor de datos .NET Framework para la clase SqlConnection de SQL Server para 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 a solo las tablas del esquema "Sales":
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = "...";
Dim restrictions(3) As String
Using connection As New SqlConnection(connectionString)
connection.Open()
'Specify the restrictions.
restrictions(1) = "Sales"
Dim table As DataTable = connection.GetSchema("Tables", _
restrictions)
' Display the contents of the table.
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
Next
Console.WriteLine("============================")
Next
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Using
End Sub
End Module
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString ="...";
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.
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("============================");
}
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.
Usuarios
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Nombre_de_Usuario |
@Name |
nombre |
1 |
Bases de datos
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Nombre |
@Name |
Nombre |
1 |
Tablas
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 |
TipoDeTabla |
@TableType |
TIPO_DE_TABLA |
4 |
Columnas
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 |
@Table |
TABLE_NAME |
3 |
Columna |
@Column |
nombre de columna |
4 |
StructuredTypeMembers
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 |
@Table |
TABLE_NAME |
3 |
Columna |
@Column |
nombre de columna |
4 |
Vistas
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 |
@Table |
TABLE_NAME |
3 |
ViewColumns
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Catálogo |
@Catalog |
VER_CATÁLOGO |
1 |
Propietario |
@Owner |
ESQUEMA_DE_VISTA |
2 |
Tabla |
@Table |
VIEW_NAME |
3 |
Columna |
@Column |
nombre de columna |
4 |
Parámetros del Procedimiento
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Catálogo |
@Catalog |
CATÁLOGO_ESPECÍFICO |
1 |
Propietario |
@Owner |
ESQUEMA_ESPECÍFICO |
2 |
Nombre |
@Name |
SPECIFIC_NAME |
3 |
Parámetro |
@Parameter |
PARAMETER_NAME |
4 |
Procedimientos
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Catálogo |
@Catalog |
CATÁLOGO_ESPECÍFICO |
1 |
Propietario |
@Owner |
ESQUEMA_ESPECÍFICO |
2 |
Nombre |
@Name |
SPECIFIC_NAME |
3 |
Tipo |
@Type |
TIPO_DE_RUTINA |
4 |
Columnas de Índice
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Catálogo |
@Catalog |
db_name() |
1 |
Propietario |
@Owner |
user_name() |
2 |
Tabla |
@Table |
o.name |
3 |
ConstraintName |
@ConstraintName |
x.name |
4 |
Columna |
@Column |
c.name |
5 |
Índices
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Catálogo |
@Catalog |
db_name() |
1 |
Propietario |
@Owner |
user_name() |
2 |
Tabla |
@Table |
o.name |
3 |
TiposDefinidosPorElUsuario
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
assembly_name |
@AssemblyName |
assemblies.name |
1 |
udt_name |
@UDTName |
types.assembly_class |
2 |
ForeignKeys
Nombre de la restricción |
Nombre de parámetro |
Valor predeterminado de la restricción |
Número de restricciones |
Catálogo |
@Catalog |
CATÁLOGO_DE_RESTRICCIONES |
1 |
Propietario |
@Owner |
esquema de restricción (CONSTRAINT_SCHEMA) |
2 |
Tabla |
@Table |
TABLE_NAME |
3 |
Nombre |
@Name |
CONSTRAINT_NAME |
4 |
Restricciones de esquema de SQL Server 2008
En la tabla siguiente se muestran las restricciones de las colecciones de esquemas de SQL Server 2008. Estas restricciones son válidas a partir de la versión 3.5 SP1 de .NET Framework y SQL Server 2008. No se admiten en versiones anteriores de .NET Framework y SQL Server.
ColumnSetColumns
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 |
@Table |
TABLE_NAME |
3 |
AllColumns
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 |
@Table |
TABLE_NAME |
3 |
Columna |
@Column |
nombre de columna |
4 |
Consulte también