-->

抓住扩展属性从SQL Server到数据表(Grabbing extended properties

2019-09-19 02:23发布

我有一个名为视图PersonOverview其中有一堆列; 这是一个完全正常的观点,没有什么特别的地方。

我增加了一个称为扩展属性FlexGridHide具有值1DatenbereichCD使用该视图的列中。

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或晦涩的东西?

更新:未经训练的无知,已经Extended Properties上的SQL Server列, Extended Properties在ADO.NET DataColumn排序类型的建议,这些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

Answer 1:

根据这篇文章的SQL Server扩展性和ADO.NET扩展属性是不相关的:

该dataColumn.ExtendedProperties是不相关的列上的SQL服务器后端的扩展属性。

看来,你将需要诉诸一个检索扩展属性单独的查询 。

DataTable personUebersicht = new DataTable();
DataTable extendedProperties = new DataTable();

using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["MYDB"].ConnectionString))
{
    string sqlSelect = @"SELECT TOP 5 DatenbereichCD FROM dbo.vPersonOverview";
    using (SqlCommand cmd = new SqlCommand(sqlSelect, con))
    using (SqlDataAdapter dap = new SqlDataAdapter(cmd))
    {
        dap.Fill(personUebersicht);
    }

    string sqlProperties = @"SELECT name, value FROM ::fn_listextendedproperty(null,'user','dbo','view','vPersonOverview','column','DatenbereichCD')";
    using (SqlCommand cmd = new SqlCommand(sqlProperties, con))
    using (SqlDataAdapter dap = new SqlDataAdapter(cmd))
    {
        dap.Fill(extendedProperties);
    }
}

// Test the results
foreach (DataRow row in extendedProperties.Rows)
{
    Console.WriteLine(string.Format("{0}: {1}", row["name"], row["value"]));
}


文章来源: Grabbing extended properties from SQL Server into DataTable