Вторым необязательным параметром метода GetSchema являются ограничения, используемые для ограничения объема возвращаемых сведений о схеме, передаваемые методу GetSchema в виде массива строк. Позиция в массиве определяет значения, которые можно передать, и она эквивалентна номеру ограничения.
Например, в следующей таблице описываются ограничения, поддерживаемые коллекцией схемы "Tables", использующей поставщик данных Microsoft SqlClient для SQL Server. Дополнительные ограничения для коллекций схем SQL Server перечислены в конце данного раздела.
Имя ограничения
имени параметра
Значение ограничения по умолчанию
Номер ограничения
Каталог
@Catalog
TABLE_CATALOG
1
Ответственный
@Owner
TABLE_SCHEMA
2
Таблица
@Name
TABLE_NAME
3
TableType
@TableType
TABLE_TYPE
4
Указание значений ограничения
Чтобы использовать одно из ограничений коллекции схем Tables, необходимо создать массив строк с четырьмя элементами, затем поместить значение в элемент, совпадающий с номером ограничения. Например, чтобы ограничить таблицы, возвращаемые методом GetSchema только таблицами из схемы "Sales", перед передачей массива методу GetSchema присвойте второму элементу массива значение "Sales".
Примечание.
В коллекциях ограничений для SqlClient есть дополнительный столбец ParameterName. Столбец ограничения по умолчанию оставлен для обратной совместимости, но не учитывается. Параметризованные запросы, а не строковые замены, следует использовать для минимизации риска атаки на внедрение SQL при указании значений ограничений.
Количество элементов в массиве должно быть меньше или равно количеству ограничений, поддерживаемых специальной коллекцией схем, в противном случае возникнет исключение ArgumentException. Их может быть меньше максимального количества ограничений. Предполагается, что отсутствующие ограничения имеют значение NULL (без ограничений).
Можно запросить поставщик данных Microsoft SqlClient для SQL Server для определения списка поддерживаемых ограничений, вызвав метод GetSchema с именем коллекции схем ограничений "Restrictions". Будет возвращен объект DataTable со списком имен коллекций и ограничений, значениями ограничений по умолчанию и номерами ограничений.
Пример
В приведенных ниже примерах демонстрируется использование метода GetSchema класса SqlConnection поставщика данных Microsoft SqlClient для SQL Server для извлечения данных схемы о всех таблицах, содержащихся в учебной базе данных AdventureWorks, а также для ограничения возвращаемых данных только таблицами из схемы "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("============================");
}
}
}
Ограничения схемы SQL Server
В приведенных ниже таблицах перечислены ограничения коллекций схем SQL Server.