SqlConnection.GetSchema Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Overload
GetSchema() |
Restituisce informazioni sullo schema per l'origine dati di questo oggetto SqlConnection. Per altre informazioni sullo schema, vedere Raccolte di schemi di SQL Server. |
GetSchema(String) |
Restituisce le informazioni di schema per l'origine dati dell'oggetto SqlConnection usando la stringa specificata per il nome dello schema. |
GetSchema(String, String[]) |
Restituisce le informazioni di schema per l'origine dati dell'oggetto SqlConnection utilizzando la stringa specificata per il nome dello schema e la matrice di stringhe specificata per i valori di restrizione. |
GetSchema()
Restituisce informazioni sullo schema per l'origine dati di questo oggetto SqlConnection. Per altre informazioni sullo schema, vedere Raccolte di schemi di SQL Server.
public:
override System::Data::DataTable ^ GetSchema();
public override System.Data.DataTable GetSchema ();
abstract member GetSchema : unit -> System.Data.DataTable
override this.GetSchema : unit -> System.Data.DataTable
override this.GetSchema : unit -> System.Data.DataTable
Public Overrides Function GetSchema () As DataTable
Restituisce
Oggetto DataTable che contiene informazioni sullo schema.
Si applica a
GetSchema(String)
Restituisce le informazioni di schema per l'origine dati dell'oggetto SqlConnection usando la stringa specificata per il nome dello schema.
public:
override System::Data::DataTable ^ GetSchema(System::String ^ collectionName);
public override System.Data.DataTable GetSchema (string collectionName);
abstract member GetSchema : string -> System.Data.DataTable
override this.GetSchema : string -> System.Data.DataTable
override this.GetSchema : string -> System.Data.DataTable
Public Overrides Function GetSchema (collectionName As String) As DataTable
Parametri
- collectionName
- String
Specifica il nome dello schema da restituire.
Restituisce
Oggetto DataTable che contiene informazioni sullo schema.
Eccezioni
collectionName
è specificato come Null.
Commenti
Potrebbero essere necessarie le informazioni sullo schema del database, delle tabelle o delle colonne. Questo esempio:
Usa GetSchema per ottenere informazioni sullo schema.
Usare le restrizioni dello schema per ottenere le informazioni specificate.
Ottiene informazioni sullo schema del database, delle tabelle e di alcune colonne.
Prima di eseguire l'esempio, è necessario creare il database di esempio usando transact-SQL seguente:
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
Come ottenere informazioni sullo schema dal database include versioni C# e Visual Basic di questo esempio di codice in un progetto di Visual Studio.
using System;
using System.Data;
using Microsoft.Data.SqlClient;
class Program
{
static void Main(string[] args)
{
using (SqlConnection conn = new SqlConnection("Data Source=(local);Initial Catalog=MySchool;Integrated Security=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);
}
}
}
Si applica a
GetSchema(String, String[])
Restituisce le informazioni di schema per l'origine dati dell'oggetto SqlConnection utilizzando la stringa specificata per il nome dello schema e la matrice di stringhe specificata per i valori di restrizione.
public:
override System::Data::DataTable ^ GetSchema(System::String ^ collectionName, cli::array <System::String ^> ^ restrictionValues);
public override System.Data.DataTable GetSchema (string collectionName, string[] restrictionValues);
abstract member GetSchema : string * string[] -> System.Data.DataTable
override this.GetSchema : string * string[] -> System.Data.DataTable
override this.GetSchema : string * string[] -> System.Data.DataTable
Public Overrides Function GetSchema (collectionName As String, restrictionValues As String()) As DataTable
Parametri
- collectionName
- String
Specifica il nome dello schema da restituire.
- restrictionValues
- String[]
Insieme di valori di restrizione per lo schema richiesto.
Restituisce
Oggetto DataTable che contiene informazioni sullo schema.
Eccezioni
collectionName
è specificato come Null.
Commenti
Il restrictionValues
parametro può fornire n profondità di valori, specificati dalla raccolta restrizioni per una raccolta specifica. Per impostare i valori su una determinata restrizione e non impostare i valori di altre restrizioni, è necessario impostare le restrizioni precedenti su null
e quindi inserire il valore appropriato per la restrizione che si desidera specificare un valore per.
Un esempio di questo è l'insieme "Tables". Se l'insieme "Tables" include tre restrizioni, proprietario e nome tabella e si desidera tornare solo alle tabelle associate al proprietario "Carl", è necessario passare i valori seguenti: Null, "Carl". Se non viene passato un valore di restrizione, i valori predefiniti vengono usati per tale restrizione. Si tratta dello stesso mapping del passaggio in null
, che è diverso dal passaggio di una stringa vuota per il valore del parametro. In tal caso, la stringa vuota ("") viene considerata come il valore per il parametro specificato.
Per un esempio di codice che GetSchemaillustra , vedere GetSchema.