Ограничения схемы

Применимо: платформа .NET Framework .NET Standard

Скачать ADO.NET

Вторым необязательным параметром метода 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.

Пользователи

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
User_Name @Name name 1

Базы данных

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Имя. @Name Имя. 1

Таблицы

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog TABLE_CATALOG 1
Ответственный @Owner TABLE_SCHEMA 2
Таблица @Name TABLE_NAME 3
TableType @TableType TABLE_TYPE 4

Столбцы

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog TABLE_CATALOG 1
Ответственный @Owner TABLE_SCHEMA 2
Таблица @Table TABLE_NAME 3
Column @Column COLUMN_NAME 4

StructuredTypeMembers

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog TABLE_CATALOG 1
Ответственный @Owner TABLE_SCHEMA 2
Таблица @Table TABLE_NAME 3
Column @Column COLUMN_NAME 4

Представления

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog TABLE_CATALOG 1
Ответственный @Owner TABLE_SCHEMA 2
Таблица @Table TABLE_NAME 3

ViewColumns

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog VIEW_CATALOG 1
Ответственный @Owner VIEW_SCHEMA 2
Таблица @Table VIEW_NAME 3
Column @Column COLUMN_NAME 4

ProcedureParameters

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog SPECIFIC_CATALOG 1
Ответственный @Owner SPECIFIC_SCHEMA 2
Имя. @Name SPECIFIC_NAME 3
Параметр @Parameter PARAMETER_NAME 4

Процедуры

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog SPECIFIC_CATALOG 1
Ответственный @Owner SPECIFIC_SCHEMA 2
Имя. @Name SPECIFIC_NAME 3
Тип @Type ROUTINE_TYPE 4

IndexColumns

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog db_name() 1
Ответственный @Owner user_name() 2
Таблица @Table o.name 3
ConstraintName @ConstraintName x.name 4
Column @Column c.name 5

Индексы

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog db_name() 1
Ответственный @Owner user_name() 2
Таблица @Table o.name 3

UserDefinedTypes

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
assembly_name @AssemblyName assemblies.name 1
udt_name @UDTName types.assembly_class 2

ForeignKeys

Имя ограничения имени параметра Значение ограничения по умолчанию Номер ограничения
Каталог @Catalog CONSTRAINT_CATALOG 1
Ответственный @Owner CONSTRAINT_SCHEMA 2
Таблица @Table TABLE_NAME 3
Имя. @Name CONSTRAINT_NAME 4

См. также