Проверка наличия определенного ключа в базе данных

Я сохранил определенный запрос MDX и запускаю его с помощью ADOMD.NET. Я получаю обратно CellSet, который я конвертирую в набор данных. Все это работает нормально. Теперь команда БД изменила структуру куба. Они обновили DimesnionName, имя атрибута и т. д. Некоторые измерения были переименованы, а некоторые удалены. Из-за этого я не могу запускать сохраненные запросы. Я хочу создать консольное приложение, которое будет принимать список ключей (формат [DimensionName].[AttributeName] или [DimensionName].[AttributeName].[MemeberName]), и оно сообщит мне, что следующие ключи не существуют.

Пожалуйста, дайте мне знать, возможно ли это программно. Я не хочу проверять это вручную.

Пожалуйста, поделитесь ссылкой или кодом, который поможет мне достичь этого.

Спасибо.


person SharpCoder    schedule 04.02.2013    source источник


Ответы (1)


Если вы уже используете ADOMD, это не должно быть проблемой, просто используйте запросы метаданных:

http://msdn.microsoft.com/en-us/library/ms123485.aspx

В качестве альтернативы можно использовать AMO http://msdn.microsoft.com/en-us/library/microsoft.analysisservices.aspx

Я использую его в SSIS для обработки, вы можете легко использовать его в .Net для проверки существования элементов:

using Microsoft.AnalysisServices;

...

Server server = new Server();
server.Connect(cubeConnectionString);
Database database = server.Databases.FindByName(databaseName);
Cube cube = database.Cubes.FindByName(cubeName);


foreach (MeasureGroup measureGroup in cube.MeasureGroups)           
{
  foreach (Partition partition in measureGroup.Partitions)
  {
  ...
  }
}

foreach (CubeDimension cubeDimension in cube.Dimensions)
{
  Dimension dimension = cubeDimension.Dimension;
  var dimName = dimension.Name;
  ...
}

Заранее найти имена для всех необходимых элементов, вероятно, самая сложная часть (и поддерживать все это в актуальном состоянии).

Не проще ли отправить все запросы кубу и попытаться перехватить ответ «такой вещи нет»?

person Meff    schedule 05.02.2013