次の方法で共有


スキーマの制限

適用対象: .NET Framework .NET .NET Standard

ADO.NET のダウンロード

GetSchema メソッドの 2 番目のオプション パラメーターは、返されるスキーマ情報の量を制限するために使用される制限で、文字列の配列として GetSchema メソッドに渡されます。 配列での位置により、渡すことができる値が決定します。これは、制限の番号に相当します。

たとえば、次の表は、Microsoft SqlClient Data Provider for SQL Server を使用する "テーブル" スキーマ コレクションでサポートされている制限を示しています。 SQL Server スキーマ コレクションの追加の制限をこのトピックの終わりに示します。

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog TABLE_CATALOG 1
Owner @Owner TABLE_SCHEMA 2
テーブル @Name TABLE_NAME 3
TableType @TableType TABLE_TYPE 4

制限値の指定

"Tables" スキーマ コレクションの制限の 1 つを使用するには、4 つの要素を使って文字列の配列を作成してから、制限の番号と一致する要素内に値を配置します。 たとえば、GetSchema メソッドにより返されるテーブルを、"Sales" スキーマ内のテーブルのみに制限するには、GetSchema メソッドに渡す前に、配列の 2 番目の要素を "Sales" に設定します。

Note

  • SqlClient の制限のコレクションには、追加の ParameterName 列があります。 制限の既定の列は、下位互換性のために存在してはいますが、現在は無視されています。 制限値を指定するときに SQL インジェクション攻撃のリスクを最小限に抑えるには、文字列置換ではなくパラメーター化されたクエリを使用する必要があります。
  • 配列内の要素数は、指定したスキーマ コレクションでサポートされる制限数以下にする必要があります。そうでない場合、ArgumentException がスローされます。 制限は最大数よりも小さい場合があります。 指定されていない制限は、null (無制限) と見なされます。

Microsoft SqlClient Data Provider for SQL Server に対してクエリを実行して、サポートされている制限の一覧を確認するには、"Restrictions" という制限のスキーマ コレクションの名前を指定して GetSchema メソッドを呼び出します。 これにより、コレクション名の一覧、制限の名前、既定の制限値、および制限の番号と共に、DataTable が返されます。

Microsoft SqlClient Data Provider for SQL Server SqlConnection クラスの GetSchema メソッドを使って、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 スキーマ コレクションの制限を示します。

Users

制限の名前 パラメーター名 制限の既定値 制限の番号
User_Name @Name name 1

データベース

制限の名前 パラメーター名 制限の既定値 制限の番号
名前 @Name 名前 1

[テーブル]

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog TABLE_CATALOG 1
Owner @Owner TABLE_SCHEMA 2
テーブル @Name TABLE_NAME 3
TableType @TableType TABLE_TYPE 4

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog TABLE_CATALOG 1
Owner @Owner TABLE_SCHEMA 2
テーブル @Table TABLE_NAME 3
Column @Column COLUMN_NAME 4

StructuredTypeMembers

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog TABLE_CATALOG 1
Owner @Owner TABLE_SCHEMA 2
テーブル @Table TABLE_NAME 3
Column @Column COLUMN_NAME 4

Views

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog TABLE_CATALOG 1
Owner @Owner TABLE_SCHEMA 2
テーブル @Table TABLE_NAME 3

ViewColumns

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog VIEW_CATALOG 1
Owner @Owner VIEW_SCHEMA 2
テーブル @Table VIEW_NAME 3
Column @Column COLUMN_NAME 4

ProcedureParameters

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog SPECIFIC_CATALOG 1
Owner @Owner SPECIFIC_SCHEMA 2
名前 @Name SPECIFIC_NAME 3
パラメーター @Parameter PARAMETER_NAME 4

プロシージャ

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog SPECIFIC_CATALOG 1
Owner @Owner SPECIFIC_SCHEMA 2
名前 @Name SPECIFIC_NAME 3
種類 @Type ROUTINE_TYPE 4

IndexColumns

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog db_name() 1
Owner @Owner user_name() 2
テーブル @Table o.name 3
ConstraintName @ConstraintName x.name 4
Column @Column c.name 5

Indexes

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog db_name() 1
Owner @Owner user_name() 2
テーブル @Table o.name 3

UserDefinedTypes

制限の名前 パラメーター名 制限の既定値 制限の番号
assembly_name @AssemblyName assemblies.name 1
udt_name @UDTName types.assembly_class 2

ForeignKeys

制限の名前 パラメーター名 制限の既定値 制限の番号
Catalog @Catalog CONSTRAINT_CATALOG 1
Owner @Owner CONSTRAINT_SCHEMA 2
テーブル @Table TABLE_NAME 3
名前 @Name CONSTRAINT_NAME 4

関連項目