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
接続は正常に機能し、クエリは正常に実行され、期待どおりに5行が返され、列が存在し、コレクションに値が取得されないことを除いて、すべて正常に見えます-.Count
常に0です.
何か案は?これらの拡張プロパティを実際に取得するためにできることはありますか? 接続文字列パラメーターまたはプロパティ、SqlCommand
または何かあいまいですか?
更新:Extended Properties
SQL Server の列とExtended Properties
ADO.NETDataColumn
の種類を持っている訓練を受けていない無知な人は、これらの SQL Server の拡張プロパティが ADO.NET の拡張プロパティに読み込まれることを示唆していますが、実際にはそうではないようですケース - うーん……。
ケビンが提案したように、2番目のクエリを使用することになりましたが、テーブルとビューの両方の拡張プロパティを取得する必要があり、関数を使用して探しているものを指定する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