Den andra valfria parametern för GetSchema metoden är de begränsningar som används för att begränsa mängden schemainformation som returneras. Den skickas till GetSchema metoden som en matris med strängar. Positionen i matrisen bestämmer de värden som du kan skicka, och detta motsvarar begränsningsnumret.
I följande tabell beskrivs till exempel de begränsningar som stöds av schemasamlingen "Tabeller" med hjälp av .NET Framework Data Provider för SQL Server. Ytterligare begränsningar för SQL Server-schemasamlingar visas i slutet av den här artikeln.
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Name |
TABELL_NAMN |
3 |
| Tabelltyp |
@TableType |
TABLE_TYPE |
4 |
Ange begränsningsvärden
Om du vill använda en av begränsningarna i schemasamlingen Tabeller skapar du bara en matris med strängar med fyra element och placerar sedan ett värde i elementet som matchar begränsningsnumret. Om du till exempel vill begränsa de tabeller som returneras av GetSchema metoden till endast de tabellerna i schemat "Försäljning" anger du det andra elementet i matrisen till "Försäljning" innan du skickar det till GetSchema metoden.
Kommentar
Begränsningssamlingarna för SqlClient och OracleClient har en ytterligare kolumn ParameterName. Standardkolumnen för begränsning finns fortfarande för bakåtkompatibilitet, men ignoreras för närvarande. Parameteriserade frågor i stället för strängersättning bör användas för att minimera risken för en SQL-inmatningsattack när du anger begränsningsvärden.
Kommentar
Antalet element i matrisen måste vara mindre än eller lika med det antal begränsningar som stöds för den angivna schemasamlingen, annars genereras ett ArgumentException . Det kan finnas färre än det maximala antalet begränsningar. De saknade begränsningarna antas vara null (obegränsade).
Du kan fråga en .NET Framework-hanterad provider för att fastställa vilka begränsningar som stöds genom att anropa metoden GetSchema med namnet på schemasamlingen Begränsningar. Detta returnerar en DataTable med en lista över samlingsnamnen, begränsningsnamnen, standardbegränsningsvärdena och begränsningsnumren.
Exempel
Följande exempel visar hur du använder GetSchema metoden för .NET Framework-dataprovidern för SQL Server-klassen SqlConnection för att hämta schemainformation om alla tabeller som finns i exempeldatabasen AdventureWorks och för att begränsa den information som returneras till endast de tabellerna i "Sales"-schemat:
Imports System.Data.SqlClient
Module Module1
Sub Main()
Dim connectionString As String = "...";
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 ="...";
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 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("============================");
}
}
}
Begränsningar för SQL Server-schema
I följande tabeller visas begränsningarna för SQL Server-schemasamlingar.
Användare
| Begränsningsnamn |
Parameternamn |
Standardinställning för begränsning |
Begränsningsnummer |
| Användarnamn |
@Name |
namn |
1 |
Databaser
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Namn |
@Name |
Namn |
1 |
Tabeller
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Name |
TABELL_NAMN |
3 |
| Tabelltyp |
@TableType |
TABLE_TYPE |
4 |
Kolumner
| Begränsningsnamn |
Parameternamn |
Standardinställning för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Table |
TABELL_NAMN |
3 |
| Kolumn |
@Column |
KOLUMN_NAMN |
4 |
StruktureradeTypMedlemmar
| Begränsningsnamn |
Parameternamn |
Standardinställning för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Table |
TABELL_NAMN |
3 |
| Kolumn |
@Column |
KOLUMN_NAMN |
4 |
Vyer
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Table |
TABELL_NAMN |
3 |
Visa kolumner
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
VIEW_CATALOG |
1 |
| Ägare |
@Owner |
VIEW_SCHEMA |
2 |
| Tabell |
@Table |
Visa_namn |
3 |
| Kolumn |
@Column |
KOLUMN_NAMN |
4 |
Procedureparametrar
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
SPECIFIK_KATALOG |
1 |
| Ägare |
@Owner |
SPECIFIC_SCHEMA |
2 |
| Namn |
@Name |
SPECIFIC_NAME |
3 |
| Parameter |
@Parameter |
PARAMETER_NAME |
4 |
Förfaranden
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
SPECIFIK_KATALOG |
1 |
| Ägare |
@Owner |
SPECIFIC_SCHEMA |
2 |
| Namn |
@Name |
SPECIFIC_NAME |
3 |
| Typ |
@Type |
TYP_AV_RUTIN |
4 |
Indexkolumner
| Begränsningsnamn |
Parameternamn |
Standardinställning för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
db_name() |
1 |
| Ägare |
@Owner |
user_name() |
2 |
| Tabell |
@Table |
o.name |
3 |
| ConstraintName |
@ConstraintName |
x.name |
4 |
| Kolumn |
@Column |
c.name |
5 |
Indexer
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
db_name() |
1 |
| Ägare |
@Owner |
user_name() |
2 |
| Tabell |
@Table |
o.name |
3 |
Användardefinierade Typer
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| namn på sammansättning |
@AssemblyName |
församlingar.namn |
1 |
| udt_name |
@UDTName |
typer.samling_klass |
2 |
ForeignKeys
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
Begränsningskatalog |
1 |
| Ägare |
@Owner |
Begränsningsschema |
2 |
| Tabell |
@Table |
TABELL_NAMN |
3 |
| Namn |
@Name |
BEGRÄNSNING_NAMN |
4 |
Schemabegränsningar för SQL Server 2008
I följande tabeller visas begränsningarna för SQL Server 2008-schemasamlingar. Dessa begränsningar är giltiga från och med version 3.5 SP1 av .NET Framework och SQL Server 2008. De stöds inte i tidigare versioner av .NET Framework och SQL Server.
KolumnSättKolumner
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Table |
TABELL_NAMN |
3 |
AllaKolumner
| Begränsningsnamn |
Parameternamn |
Standard för begränsning |
Begränsningsnummer |
| Katalog |
@Catalog |
TABELL_KATALOG |
1 |
| Ägare |
@Owner |
BORD_SCHEMA |
2 |
| Tabell |
@Table |
TABELL_NAMN |
3 |
| Kolumn |
@Column |
KOLUMN_NAMN |
4 |
Se även