gpt4 book ai didi

sql-server-2008 - 将 SQL Server 中的扩展属性抓取到 DataTable 中

转载 作者:行者123 更新时间:2023-12-04 05:40:22 24 4
gpt4 key购买 nike

我有一个名为 PersonOverview 的 View 它有一堆列;这是一个完全正常的 View ,没有什么特别之处。

我添加了一个名为 FlexGridHide 的扩展属性值为 1DatenbereichCD该 View 使用的列。

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 中找到扩展属性 - 没问题 - 它就在那里。

但是当我将 View 中的数据加载到 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 type 建议将那些 SQL Server 扩展属性加载到 ADO.NET 扩展属性中 - 但事实似乎并非如此 - 嗯.....

正如凯文所建议的那样,我最终使用了第二个查询 - 但由于我需要为表和 View 获取扩展属性,并且您必须使用 fn_listextendedproperty 指定您要查找的内容。函数,我选择查询 sys.extended_properties我需要的信息的系统目录 View 。这是我用来从 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

最佳答案

根据 this post SQL Server 扩展属性和 ADO.NET 扩展属性不相关:

The dataColumn.ExtendedProperties is not related to the extended property of column on the SQL server backend.



看来您需要求助于检索 separate query 中的扩展属性。 .
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"]));
}

关于sql-server-2008 - 将 SQL Server 中的扩展属性抓取到 DataTable 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331336/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com