У меня есть представление 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
в типе DataColumn
ADO.NET предполагало, что эти расширенные свойства 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