Имам изглед, наречен 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
или нещо неясно?
Актуализация: за нетренираните невежи, наличието на 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