我有一个视图叫PersonOverview
,它有一堆列;这是一个完全正常的观点,没有什么特别的。从SQL Server获取扩展属性到DataTable中
我在该视图的DatenbereichCD
列中添加了一个名为FlexGridHide
的扩展属性,其值为1
。
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中找到扩展属性 - 没问题 - 它在那里。
但是,当我从视图数据加载到一个DataTable
,我显然不能够真正宣读扩展属性:
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
上的某个属性或某个模糊的内容?
更新:未经训练的无知,其在ADO.NET DataColumn
型Extended Properties
上的SQL Server列,Extended Properties
排序表明,这些SQL Server扩展属性将被加载到ADO.NET扩展性 - 但这似乎并不是真的 - 嗯......
我结束了使用第二个查询,因为凯文建议 - 但因为我需要获得扩展属性的表和视图,你有到指定您使用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
我知道这不是最佳的,但你有没有考虑过使用fn_listextendedproperty表函数? – Lamak
@AaronBertrand:谨慎发布这是一个“连接”问题给微软?他们似乎听取了你的意见 - 对我来说远不止这些:-) –