Bei dem zweiten optionalen Parameter der GetSchema-Methode handelt es sich um Einschränkungen, die zum Einschränken der Menge der zurückgegebenen Schemainformationen verwendet werden. Dieser Parameter wird als Zeichenfolgenarray an die GetSchema-Methode übergeben. Die Position im Array bestimmt die Werte, die zurückgegeben werden können. Dies entspricht der Anzahl der Einschränkungen.
In der folgenden Tabelle werden beispielsweise die Einschränkungen beschrieben, die von der Schemaauflistung "Tables" mithilfe des .NET Framework-Datenanbieters für SQL Server unterstützt werden. Zusätzliche Einschränkungen für SQL Server-Schemaauflistungen werden am Ende dieses Themas aufgeführt.
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
TABLE_CATALOG
1
Besitzer
@Owner
TABLE_SCHEMA
2
Tabelle
@Name
table_name
3
TableType
@TableType
TABLE_TYPE
4
Angeben der Einschränkungswerte
Wenn Sie eine der Einschränkungen der Tables-Schemaauflistung verwenden möchten, erstellen Sie ein Zeichenfolgenarray mit vier Elementen und fügen einen Wert in das Element ein, das mit der Einschränkungsnummer übereinstimmt. Legen Sie das zweite Element des Arrays auf „Sales“ fest, bevor Sie es an die GetSchema-Methode übergeben, um beispielsweise die Tabellen einzuschränken, die von der GetSchema-Methode an die Tabellen im Schema „Sales“ zurückgegeben werden.
Hinweis
Die Einschränkungsauflistungen für den SqlClient und den OracleClient verfügen über eine zusätzliche ParameterName-Spalte. Die Spalte für den Einschränkungsstandard ist zwar aus Gründen der Abwärtskompatibilität vorhanden, wird aber derzeit ignoriert. Verwenden Sie Abfragen mit Parametern statt Zeichenfolgenersetzungen, um das Risiko eines SQL-Injection-Angriffs beim Angeben der Einschränkungswerte zu minimieren.
Hinweis
Die Anzahl der Elementen im Array muss kleiner oder gleich der Anzahl der Einschränkungen sein, die für die angegebene Schemaauflistung unterstützt werden, da sonst eine ArgumentException ausgelöst wird. Es können weniger Elemente als die maximale Anzahl der Einschränkungen vorhanden sein. Es wird davon ausgegangen, dass die fehlenden Einschränkungen NULL (uneingeschränkt) sind.
Sie können einen verwalteten .NET Framework-Anbieter abfragen, um die Liste der unterstützten Einschränkungen zu ermitteln. Rufen Sie dazu die GetSchema-Methode mit dem Namen der Schemaauflistung der Einschränkungen („Restrictions“) auf. Dabei wird eine DataTable mit einer Liste der Auflistungsnamen, Einschränkungsnamen, Standardeinschränkungswerte und der Anzahl der Einschränkungen zurückgegeben.
Beispiel
In den folgenden Beispielen wird veranschaulicht, wie die GetSchema-Methode des .NET Framework-Datenanbieters für die SQL Server-Klasse SqlConnection verwendet wird, um Schemainformationen zu allen in der Beispieldatenbank AdventureWorks enthaltenen Tabellen abzurufen und die zurückgegebenen Informationen auf die Tabellen im „Sales“-Schema zu beschränken:
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = _
"Data Source=(local);Database=AdventureWorks;" & _
"Integrated Security=true;";
Dim restrictions(3) As String
Using connection As New SqlConnection(connectionString)
connection.Open()
'Specify the restrictions.
restrictions(1) = "Sales"
Dim table As DataTable = connection.GetSchema("Tables", _
restrictions)
' Display the contents of the table.
For Each row As DataRow In table.Rows
For Each col As DataColumn In table.Columns
Console.WriteLine("{0} = {1}", col.ColumnName, row(col))
Next
Console.WriteLine("============================")
Next
Console.WriteLine("Press any key to continue.")
Console.ReadKey()
End Using
End Sub
End Module
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
string connectionString =
"Data Source=(local);Database=AdventureWorks;" +
"Integrated Security=true;";
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.
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("============================");
}
Console.WriteLine("Press any key to continue.");
Console.ReadKey();
}
}
private static string GetConnectionString()
{
// To avoid storing the connection string in your code,
// you can retrieve it from a configuration file.
return "Data Source=(local);Database=AdventureWorks;" +
"Integrated Security=true;";
}
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-Schemabeschränkungen
In den folgenden Tabellen sind die Beschränkungen für SQL Server-Schemaauflistungen aufgeführt.
Benutzer
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
User_Name
@Name
name
1
Datenbanken
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Name
@Name
Name
1
Tabellen
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
TABLE_CATALOG
1
Besitzer
@Owner
TABLE_SCHEMA
2
Tabelle
@Name
table_name
3
TableType
@TableType
TABLE_TYPE
4
Spalten
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
TABLE_CATALOG
1
Besitzer
@Owner
TABLE_SCHEMA
2
Tabelle
@Table
table_name
3
Spalte
@Column
COLUMN_NAME
4
StructuredTypeMembers
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
TABLE_CATALOG
1
Besitzer
@Owner
TABLE_SCHEMA
2
Tabelle
@Table
table_name
3
Spalte
@Column
COLUMN_NAME
4
Sichten
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
TABLE_CATALOG
1
Besitzer
@Owner
TABLE_SCHEMA
2
Tabelle
@Table
table_name
3
ViewColumns
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
VIEW_CATALOG
1
Besitzer
@Owner
VIEW_SCHEMA
2
Tabelle
@Table
VIEW_NAME
3
Spalte
@Column
COLUMN_NAME
4
ProcedureParameters
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
SPECIFIC_CATALOG
1
Besitzer
@Owner
SPECIFIC_SCHEMA
2
Name
@Name
SPECIFIC_NAME
3
Parameter
@Parameter
PARAMETER_NAME
4
Prozeduren
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
SPECIFIC_CATALOG
1
Besitzer
@Owner
SPECIFIC_SCHEMA
2
Name
@Name
SPECIFIC_NAME
3
type
@Type
ROUTINE_TYPE
4
IndexColumns
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
db_name()
1
Besitzer
@Owner
user_name()
2
Tabelle
@Table
o.name
3
ConstraintName
@ConstraintName
x.name
4
Spalte
@Column
c.name
5
Indizes
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
db_name()
1
Besitzer
@Owner
user_name()
2
Tabelle
@Table
o.name
3
UserDefinedTypes
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
assembly_name
@AssemblyName
assemblies.name
1
udt_name
@UDTName
types.assembly_class
2
ForeignKeys
Einschränkungsname
Parametername
Einschränkungsstandard
Einschränkungsnummer
Katalog
@Catalog
CONSTRAINT_CATALOG
1
Besitzer
@Owner
CONSTRAINT_SCHEMA
2
Tabelle
@Table
table_name
3
Name
@Name
CONSTRAINT_NAME
4
SQL Server 2008-Schemabeschränkungen
In den folgenden Tabellen sind die Beschränkungen für SQL Server 2008-Schemaauflistungen aufgeführt. Diese Beschränkungen gelten ab Version 3.5 SP1 von .NET Framework und SQL Server 2008. Sie werden in früheren Versionen von .NET Framework und SQL Server nicht unterstützt.