适用于:
.NET Framework
.NET
.NET Standard
下载 ADO.NET
GetSchema 方法的第二个可选参数是用于限制返回的架构信息量的限制,该参数以字符串数组的形式传递给 GetSchema 方法 。 在数组中的位置确定可以传递的值,这等效于限制数。
例如,下表说明使用 Microsoft SqlClient Data Provider for SQL Server 时“Tables”架构集合支持的限制。 SQL Server 架构集合的其他限制在本主题的结尾处列出。
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
TABLE_CATALOG |
1 |
所有者 |
@Owner |
TABLE_SCHEMA |
2 |
表 |
@Name |
TABLE_NAME |
3 |
TableType |
@TableType |
TABLE_TYPE |
4 |
指定限制值
要使用“Tables”架构集合的一个限制,只需创建一个包含四个元素的字符串数组,然后在与限制数匹配的元素中填充值。 例如,要将 GetSchema 方法返回的表限制为仅返回“Sales”架构中的表,可将数组的第二个元素设置为“Sales”,然后再将其传递给 GetSchema 方法 。
注意
SqlClient
的限制集合具有额外的 ParameterName
列。 为了向后兼容,仍提供限制默认列,但是目前忽略该列。 应使用参数化查询而不是字符串替换来最大程度地减少指定限制值时 SQL 注入攻击的风险。
- 数组中的元素数必须小于或等于指定架构集合支持的限制数,否则,将引发 ArgumentException。 可以小于最大限制数。 缺少的限制假定为空(无限制)。
可以通过调用包含限制架构集合名称(即“Restrictions”)的 GetSchema 方法来查询 Microsoft SqlClient Data Provider for SQL Server,以确定支持的限制列表。 此时将返回 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 架构集合的限制。
用户
限制名称 |
参数名称 |
限制默认值 |
限制数 |
User_Name |
@Name |
name |
1 |
数据库
限制名称 |
参数名称 |
限制默认值 |
限制数 |
名称 |
@Name |
名称 |
1 |
表
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
TABLE_CATALOG |
1 |
所有者 |
@Owner |
TABLE_SCHEMA |
2 |
表 |
@Name |
TABLE_NAME |
3 |
TableType |
@TableType |
TABLE_TYPE |
4 |
列
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
TABLE_CATALOG |
1 |
所有者 |
@Owner |
TABLE_SCHEMA |
2 |
表 |
@Table |
TABLE_NAME |
3 |
列 |
@Column |
COLUMN_NAME |
4 |
StructuredTypeMembers
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
TABLE_CATALOG |
1 |
所有者 |
@Owner |
TABLE_SCHEMA |
2 |
表 |
@Table |
TABLE_NAME |
3 |
列 |
@Column |
COLUMN_NAME |
4 |
视图
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
TABLE_CATALOG |
1 |
所有者 |
@Owner |
TABLE_SCHEMA |
2 |
表 |
@Table |
TABLE_NAME |
3 |
ViewColumns
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
VIEW_CATALOG |
1 |
所有者 |
@Owner |
VIEW_SCHEMA |
2 |
表 |
@Table |
VIEW_NAME |
3 |
列 |
@Column |
COLUMN_NAME |
4 |
ProcedureParameters
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
SPECIFIC_CATALOG |
1 |
所有者 |
@Owner |
SPECIFIC_SCHEMA |
2 |
名称 |
@Name |
SPECIFIC_NAME |
3 |
参数 |
@Parameter |
PARAMETER_NAME |
4 |
过程
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
SPECIFIC_CATALOG |
1 |
所有者 |
@Owner |
SPECIFIC_SCHEMA |
2 |
名称 |
@Name |
SPECIFIC_NAME |
3 |
类型 |
@Type |
ROUTINE_TYPE |
4 |
IndexColumns
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
db_name() |
1 |
所有者 |
@Owner |
user_name() |
2 |
表 |
@Table |
o.name |
3 |
ConstraintName |
@ConstraintName |
x.name |
4 |
列 |
@Column |
c.name |
5 |
索引
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
db_name() |
1 |
所有者 |
@Owner |
user_name() |
2 |
表 |
@Table |
o.name |
3 |
UserDefinedTypes
限制名称 |
参数名称 |
限制默认值 |
限制数 |
assembly_name |
@AssemblyName |
assemblies.name |
1 |
udt_name |
@UDTName |
types.assembly_class |
2 |
ForeignKeys
限制名称 |
参数名称 |
限制默认值 |
限制数 |
目录 |
@Catalog |
CONSTRAINT_CATALOG |
1 |
所有者 |
@Owner |
CONSTRAINT_SCHEMA |
2 |
表 |
@Table |
TABLE_NAME |
3 |
名称 |
@Name |
CONSTRAINT_NAME |
4 |
另请参阅