SqlConnection.GetSchema 메서드

정의

SqlConnection의 데이터 소스에 대한 구성표 정보를 반환합니다.Returns schema information for the data source of this SqlConnection.

오버로드

GetSchema()

SqlConnection의 데이터 소스에 대한 구성표 정보를 반환합니다.Returns schema information for the data source of this SqlConnection. 구성표에 대한 자세한 내용은 SQL Server 구성표 컬렉션을 참조하세요.For more information about scheme, see SQL Server Schema Collections.

GetSchema(String)

스키마 이름에 대해 지정된 문자열을 사용하여 이 SqlConnection의 데이터 소스에 대한 스키마 정보를 반환합니다.Returns schema information for the data source of this SqlConnection using the specified string for the schema name.

GetSchema(String, String[])

스키마 이름에 대해 지정된 문자열과 제한 값에 대해 지정된 문자열 배열을 사용하여 이 SqlConnection의 데이터 소스에 대한 스키마 정보를 반환합니다.Returns schema information for the data source of this SqlConnection using the specified string for the schema name and the specified string array for the restriction values.

설명

둘 이상의 버전이 있는 저장된 프로시저에 대 한 스키마 정보를 검색 하려는 경우 최신에 대 한 스키마만 반환 됩니다.If you attempt to retrieve schema information for more than one versioned stored procedure, the schema for the latest one only is returned.

GetSchema()

SqlConnection의 데이터 소스에 대한 구성표 정보를 반환합니다.Returns schema information for the data source of this SqlConnection. 구성표에 대한 자세한 내용은 SQL Server 구성표 컬렉션을 참조하세요.For more information about scheme, see SQL Server Schema Collections.

public:
 override System::Data::DataTable ^ GetSchema();
public override System.Data.DataTable GetSchema ();
override this.GetSchema : unit -> System.Data.DataTable
Public Overrides Function GetSchema () As DataTable

반환

스키마 정보를 포함하는 A DataTable입니다.A DataTable that contains schema information.

추가 정보

GetSchema(String)

스키마 이름에 대해 지정된 문자열을 사용하여 이 SqlConnection의 데이터 소스에 대한 스키마 정보를 반환합니다.Returns schema information for the data source of this SqlConnection using the specified string for the schema name.

public:
 override System::Data::DataTable ^ GetSchema(System::String ^ collectionName);
public override System.Data.DataTable GetSchema (string collectionName);
override this.GetSchema : string -> System.Data.DataTable
Public Overrides Function GetSchema (collectionName As String) As DataTable

매개 변수

collectionName
String

반환할 스키마의 이름을 지정합니다.Specifies the name of the schema to return.

반환

스키마 정보를 포함하는 A DataTable입니다.A DataTable that contains schema information.

예외

collectionName이 null로 지정되어 있습니다.collectionName is specified as null.

설명

데이터베이스, 테이블 또는 열 스키마 정보를 해야 할 수 있습니다.You may need the schema information of the database, tables or columns. 이 샘플:This sample:

  • GetSchema를 사용 하 여 스키마 정보를 가져옵니다.Uses GetSchema to get schema information.

  • 스키마 제한을 사용 하 여 지정 된 정보를 가져옵니다.Use schema restrictions to get the specified information.

  • 데이터베이스, 테이블 및 열 일부의 스키마 정보를 가져옵니다.Gets schema information of the database, tables, and some columns.

샘플을 실행 하기 전에 다음 Transact-SQLTransact-SQL사용 하 여 샘플 데이터베이스를 만들어야 합니다.Before you run the sample, you need to create the sample database, using the following Transact-SQLTransact-SQL:

USE [master]
GO

CREATE DATABASE [MySchool]

GO

USE [MySchool]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Course]([CourseID] [nvarchar](10) NOT NULL,
[Year] [smallint] NOT NULL,
[Title] [nvarchar](100) NOT NULL,
[Credits] [int] NOT NULL,
[DepartmentID] [int] NOT NULL,
 CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED
(
[CourseID] ASC,
[Year] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Department]([DepartmentID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[Budget] [money] NOT NULL,
[StartDate] [datetime] NOT NULL,
[Administrator] [int] NULL,
 CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED
(
[DepartmentID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]

GO

INSERT [dbo].[Course] ([CourseID], [Year], [Title], [Credits], [DepartmentID]) VALUES (N'C1045', 2012, N'Calculus', 4, 7)
INSERT [dbo].[Course] ([CourseID], [Year], [Title], [Credits], [DepartmentID]) VALUES (N'C1061', 2012, N'Physics', 4, 1)
INSERT [dbo].[Course] ([CourseID], [Year], [Title], [Credits], [DepartmentID]) VALUES (N'C2021', 2012, N'Composition', 3, 2)
INSERT [dbo].[Course] ([CourseID], [Year], [Title], [Credits], [DepartmentID]) VALUES (N'C2042', 2012, N'Literature', 4, 2)

SET IDENTITY_INSERT [dbo].[Department] ON

INSERT [dbo].[Department] ([DepartmentID], [Name], [Budget], [StartDate], [Administrator]) VALUES (1, N'Engineering', 350000.0000, CAST(0x0000999C00000000 AS DateTime), 2)
INSERT [dbo].[Department] ([DepartmentID], [Name], [Budget], [StartDate], [Administrator]) VALUES (2, N'English', 120000.0000, CAST(0x0000999C00000000 AS DateTime), 6)
INSERT [dbo].[Department] ([DepartmentID], [Name], [Budget], [StartDate], [Administrator]) VALUES (4, N'Economics', 200000.0000, CAST(0x0000999C00000000 AS DateTime), 4)
INSERT [dbo].[Department] ([DepartmentID], [Name], [Budget], [StartDate], [Administrator]) VALUES (7, N'Mathematics', 250024.0000, CAST(0x0000999C00000000 AS DateTime), 3)
SET IDENTITY_INSERT [dbo].[Department] OFF

ALTER TABLE [dbo].[Course]  WITH CHECK ADD  CONSTRAINT [FK_Course_Department] FOREIGN KEY([DepartmentID])
REFERENCES [dbo].[Department] ([DepartmentID])
GO
ALTER TABLE [dbo].[Course] CHECK CONSTRAINT [FK_Course_Department]
GO

데이터베이스에서 스키마 정보를 가져오는 방법 C# 및 Visual Studio 프로젝트에서이 코드 샘플의 Visual Basic 버전How to Get Schema Information from Database has C# and Visual Basic versions of this code sample in a Visual Studio project.

using System;
using System.Data;
using System.Data.SqlClient;

class Program {
   static void Main(string[] args) {

      using (SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=MySchool;Integrated Security=True;Asynchronous Processing=true;")) {
         conn.Open();

         // Get the Meta Data for Supported Schema Collections
         DataTable metaDataTable = conn.GetSchema("MetaDataCollections");

         Console.WriteLine("Meta Data for Supported Schema Collections:");
         ShowDataTable(metaDataTable, 25);
         Console.WriteLine();

         // Get the schema information of Databases in your instance
         DataTable databasesSchemaTable = conn.GetSchema("Databases");

         Console.WriteLine("Schema Information of Databases:");
         ShowDataTable(databasesSchemaTable, 25);
         Console.WriteLine();

         // First, get schema information of all the tables in current database;
         DataTable allTablesSchemaTable = conn.GetSchema("Tables");

         Console.WriteLine("Schema Information of All Tables:");
         ShowDataTable(allTablesSchemaTable, 20);
         Console.WriteLine();

         // You can specify the Catalog, Schema, Table Name, Table Type to get
         // the specified table(s).
         // You can use four restrictions for Table, so you should create a 4 members array.
         String[] tableRestrictions = new String[4];

         // For the array, 0-member represents Catalog; 1-member represents Schema;
         // 2-member represents Table Name; 3-member represents Table Type.
         // Now we specify the Table Name of the table what we want to get schema information.
         tableRestrictions[2] = "Course";

         DataTable courseTableSchemaTable = conn.GetSchema("Tables", tableRestrictions);

         Console.WriteLine("Schema Information of Course Tables:");
         ShowDataTable(courseTableSchemaTable, 20);
         Console.WriteLine();

         // First, get schema information of all the columns in current database.
         DataTable allColumnsSchemaTable = conn.GetSchema("Columns");

         Console.WriteLine("Schema Information of All Columns:");
         ShowColumns(allColumnsSchemaTable);
         Console.WriteLine();

         // You can specify the Catalog, Schema, Table Name, Column Name to get the specified column(s).
         // You can use four restrictions for Column, so you should create a 4 members array.
         String[] columnRestrictions = new String[4];

         // For the array, 0-member represents Catalog; 1-member represents Schema;
         // 2-member represents Table Name; 3-member represents Column Name.
         // Now we specify the Table_Name and Column_Name of the columns what we want to get schema information.
         columnRestrictions[2] = "Course";
         columnRestrictions[3] = "DepartmentID";

         DataTable departmentIDSchemaTable = conn.GetSchema("Columns", columnRestrictions);

         Console.WriteLine("Schema Information of DepartmentID Column in Course Table:");
         ShowColumns(departmentIDSchemaTable);
         Console.WriteLine();

         // First, get schema information of all the IndexColumns in current database
         DataTable allIndexColumnsSchemaTable = conn.GetSchema("IndexColumns");

         Console.WriteLine("Schema Information of All IndexColumns:");
         ShowIndexColumns(allIndexColumnsSchemaTable);
         Console.WriteLine();

         // You can specify the Catalog, Schema, Table Name, Constraint Name, Column Name to
         // get the specified column(s).
         // You can use five restrictions for Column, so you should create a 5 members array.
         String[] indexColumnsRestrictions = new String[5];

         // For the array, 0-member represents Catalog; 1-member represents Schema;
         // 2-member represents Table Name; 3-member represents Constraint Name;4-member represents Column Name.
         // Now we specify the Table_Name and Column_Name of the columns what we want to get schema information.
         indexColumnsRestrictions[2] = "Course";
         indexColumnsRestrictions[4] = "CourseID";

         DataTable courseIdIndexSchemaTable = conn.GetSchema("IndexColumns", indexColumnsRestrictions);

         Console.WriteLine("Index Schema Information of CourseID Column in Course Table:");
         ShowIndexColumns(courseIdIndexSchemaTable);
         Console.WriteLine();
      }

      Console.WriteLine("Please press any key to exit...");
      Console.ReadKey();
   }

   private static void ShowDataTable(DataTable table, Int32 length) {
      foreach (DataColumn col in table.Columns) {
         Console.Write("{0,-" + length + "}", col.ColumnName);
      }
      Console.WriteLine();

      foreach (DataRow row in table.Rows) {
         foreach (DataColumn col in table.Columns) {
            if (col.DataType.Equals(typeof(DateTime)))
               Console.Write("{0,-" + length + ":d}", row[col]);
            else if (col.DataType.Equals(typeof(Decimal)))
               Console.Write("{0,-" + length + ":C}", row[col]);
            else
               Console.Write("{0,-" + length + "}", row[col]);
         }
         Console.WriteLine();
      }
   }

   private static void ShowDataTable(DataTable table) {
      ShowDataTable(table, 14);
   }

   private static void ShowColumns(DataTable columnsTable) {
      var selectedRows = from info in columnsTable.AsEnumerable()
                         select new {
                            TableCatalog = info["TABLE_CATALOG"],
                            TableSchema = info["TABLE_SCHEMA"],
                            TableName = info["TABLE_NAME"],
                            ColumnName = info["COLUMN_NAME"],
                            DataType = info["DATA_TYPE"]
                         };

      Console.WriteLine("{0,-15}{1,-15}{2,-15}{3,-15}{4,-15}", "TableCatalog", "TABLE_SCHEMA",
          "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE");
      foreach (var row in selectedRows) {
         Console.WriteLine("{0,-15}{1,-15}{2,-15}{3,-15}{4,-15}", row.TableCatalog,
             row.TableSchema, row.TableName, row.ColumnName, row.DataType);
      }
   }

   private static void ShowIndexColumns(DataTable indexColumnsTable) {
      var selectedRows = from info in indexColumnsTable.AsEnumerable()
                         select new {
                            TableSchema = info["table_schema"],
                            TableName = info["table_name"],
                            ColumnName = info["column_name"],
                            ConstraintSchema = info["constraint_schema"],
                            ConstraintName = info["constraint_name"],
                            KeyType = info["KeyType"]
                         };

      Console.WriteLine("{0,-14}{1,-11}{2,-14}{3,-18}{4,-16}{5,-8}", "table_schema", "table_name", "column_name", "constraint_schema", "constraint_name", "KeyType");
      foreach (var row in selectedRows) {
         Console.WriteLine("{0,-14}{1,-11}{2,-14}{3,-18}{4,-16}{5,-8}", row.TableSchema,
             row.TableName, row.ColumnName, row.ConstraintSchema, row.ConstraintName, row.KeyType);
      }
   }
}

추가 정보

GetSchema(String, String[])

스키마 이름에 대해 지정된 문자열과 제한 값에 대해 지정된 문자열 배열을 사용하여 이 SqlConnection의 데이터 소스에 대한 스키마 정보를 반환합니다.Returns schema information for the data source of this SqlConnection using the specified string for the schema name and the specified string array for the restriction values.

public:
 override System::Data::DataTable ^ GetSchema(System::String ^ collectionName, cli::array <System::String ^> ^ restrictionValues);
public override System.Data.DataTable GetSchema (string collectionName, string[] restrictionValues);
override this.GetSchema : string * string[] -> System.Data.DataTable
Public Overrides Function GetSchema (collectionName As String, restrictionValues As String()) As DataTable

매개 변수

collectionName
String

반환할 스키마의 이름을 지정합니다.Specifies the name of the schema to return.

restrictionValues
String[]

요청된 스키마에 대한 제한 값의 집합입니다.A set of restriction values for the requested schema.

반환

스키마 정보를 포함하는 A DataTable입니다.A DataTable that contains schema information.

예외

collectionName이 null로 지정되어 있습니다.collectionName is specified as null.

설명

restrictionValues 매개 변수는 특정 컬렉션에 대 한 제한 컬렉션으로 지정 된 값의 n 깊이를 제공할 수 있습니다.The restrictionValues parameter can supply n depth of values, which are specified by the restrictions collection for a specific collection. 지정 된 제한에 값을 설정 하 고 다른 제한 값을 설정 하지 않으려면 앞의 제한을 null 설정 하 고 값을 지정 하려는 제한에 적절 한 값을 입력 해야 합니다.In order to set values on a given restriction, and not set the values of other restrictions, you need to set the preceding restrictions to null and then put the appropriate value in for the restriction that you would like to specify a value for.

이러한 예로 "Table" 컬렉션입니다.An example of this is the "Tables" collection. 다음 값을 전달 해야 하는 "테이블" 컬렉션의 세 가지 제한을-데이터베이스, 소유자, 테이블 이름-하려는 "Carl" 소유자와 연결 된 테이블만 돌아갈 경우: null, "Carl"입니다.If the "Tables" collection has three restrictions--database, owner, and table name--and you want to get back only the tables associated with the owner "Carl", you need to pass in the following values: null, "Carl". 제한 값에 전달 하지 않으면, 해당 제한에 대 한 기본값이 사용 됩니다.If a restriction value is not passed in, the default values are used for that restriction. 이는 매개 변수 값에 대해 빈 문자열을 전달 하는 것과는 다른 null전달과 동일한 매핑입니다.This is the same mapping as passing in null, which is different from passing in an empty string for the parameter value. 이런 경우, 빈 문자열 ("") 지정된 된 매개 변수의 값으로 간주 됩니다.In that case, the empty string ("") is considered to be the value for the specified parameter.

GetSchema를 보여 주는 코드 샘플은 GetSchema을 참조 하세요.For a code sample demonstrating GetSchema, see GetSchema.

추가 정보

적용 대상