我有一个叫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中找到扩展属性 - 没问题 - 就在那里。
但是当我将视图中的数据加载到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
上的属性或隐藏的内容?
更新:指向未经训练的无知者,SQL Server列上有Extended Properties
,而ADO.NET Extended Properties
类型上的DataColumn
表示那些SQL Server扩展属性将被加载到ADO.NET扩展属性中 - 但实际上似乎并非如此 - 啊...... [/ p>
我最后使用了第二个查询,正如Kevin建议的那样 - 但是因为我需要为表和视图获取扩展属性,所以你必须使用{{指定你要查找的内容1}} function,我选择查询fn_listextendedproperty
系统目录视图以获取我需要的信息。这是我的查询,我用来从SQL Server获取有关扩展属性的信息:
sys.extended_properties
答案 0 :(得分:3)
根据this post,SQL Server扩展属性与ADO.NET扩展属性无关:
dataColumn.ExtendedProperties与SQL Server后端上列的扩展属性无关。
您似乎需要求助于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"]));
}