我有一个名为的视图PersonOverview
,它有一堆列;这是一个完全正常的视图,没有什么特别之处。
我使用该视图的列添加了一个名为的扩展属性FlexGridHide
,其值为。1
DatenbereichCD
EXEC sys.sp_addextendedproperty
@name = N'FlexGridHide',
@value = N'1',
@level0type = N'SCHEMA', @level0name = dbo,
@level1type = N'VIEW', @level1name = vPersonOverview,
@level2type = N'COLUMN', @level2name = DatenbereichCD;
我可以在 SQL Server 中找到该扩展属性——没问题——它就在那里。
但是,当我将视图中的数据加载到 aDataTable
中时,我显然无法实际读出该扩展属性:
string sqlSelect = @"SELECT TOP 5 DatenbereichCD FROM dbo.vPersonOverview";
DataTable personUebersicht = new DataTable();
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString))
using (SqlCommand cmd = new SqlCommand(sqlSelect, con))
using (SqlDataAdapter dap = new SqlDataAdapter(cmd))
{
dap.Fill(personUebersicht);
}
DataColumn datenbereichCD = personUebersicht.Columns["DatenbereichCD"];
int extendedProps = datenbereichCD.ExtendedProperties.Count;
ExtendedProperties
连接工作得很好,查询执行得很好,按预期返回五行,列存在,一切似乎都很好——除了我在集合中没有得到任何值——.Count
总是 0。
有任何想法吗?我能做些什么来真正获得这些扩展属性吗?连接字符串参数或属性上的SqlCommand
或什么晦涩难懂的?
更新:对于未经训练的无知者,Extended Properties
在 SQL Server 列和Extended Properties
ADO.NETDataColumn
类型上建议将那些 SQL Server 扩展属性加载到 ADO.NET 扩展属性中——但这似乎不是案例 - 嗯……
正如 Kevin 建议的那样,我最终使用了第二个查询 - 但由于我需要获取表和视图的扩展属性,并且您必须使用该函数指定要查找的内容fn_listextendedproperty
,因此我选择查询sys.extended_properties
系统目录视图我需要的信息。这是我用来从 SQL Server 获取有关扩展属性的信息的查询:
SELECT
ep.class, ep.class_desc, ep.name, ep.value,
SchemaName = s.name,
ObjectName = o.name,
ColumnName = c.Name,
ObjectType = o.type,
ObjectTypeDesc = o.type_desc
FROM sys.extended_properties ep
INNER JOIN sys.objects o ON ep.major_id = o.object_id
INNER JOIN sys.schemas s ON o.schema_id = s.schema_id
INNER JOIN sys.columns c ON ep.major_id = c.object_id AND ep.minor_id = c.column_id