Как проверить значение Почему в пойманном исключении при выполнении запроса CQL?

Я начал использовать cassandraemon (Apache Cassandra NoSQL с C#), и мне просто интересно, есть ли способ прочитать значение «Почему» в исключении, полученном при выполнении запроса CQL?

Когда я делаю следующее:

try
{
    CqlResult createResult = context.ExecuteCqlQuery(createTableCql);
}
catch (Exception exc)
{
    if (exc.Why.Contains("already existing"))
    { // Why = org.apache.cassandra.exceptions.AlreadyExistsException: Cannot add already existing column family "nameOfColumn" to keyspace "nameOfKeyspace"
    }
}

Я никак не могу получить доступ Почему в exc.

Что я хочу сделать, так это проверить, существует ли уже таблица. Я знаю, что могу проверить это, как здесь (Как проверить, является ли таблица Cassandra существует), однако только в CQL3. Способ, описанный в этой ссылке, тоже не помогает, потому что я получаю другое исключение со значением «Почему» «ненастроенное семейство столбцов schema_columnfamilies».

Я хотел бы знать, как читать содержание «Почему» в целом, потому что мне это может понадобиться в другом контексте в будущем. И он не просто возвращает какое-то значение CqlResult, которое я могу проверить, он просто генерирует исключение.

Как проверить значение «Почему» в перехваченном исключении при выполнении запроса CQL?

С уважением!

PS Во избежание скрытого кросспостинга: https://cassandraemon.codeplex.com/discussions/441028


person user1809566    schedule 21.04.2013    source источник
comment
Можете ли вы показать код cql, который вы используете для проверки существования таблицы?   -  person Lyuben Todorov    schedule 21.04.2013


Ответы (1)


Ошибка сообщает вам, что таблица (также известная как семейство столбцов), которую вы ищете, не существует, но таблица schema_columnfamilies должна существовать всегда, поэтому проблема, скорее всего, заключается в том, что вы не указываете, в какой схеме (также известной как пространство ключей) находится таблица. .

Этот оператор предполагает, что вы указали, что используете пространство ключей system:

SELECT columnfamily_name 
FROM schema_columnfamilies WHERE keyspace_name='keyspaceName';

Я думаю, вы не указываете, что вы должны использовать системное пространство ключей, поэтому попробуйте это в качестве оператора CQL, чтобы убедиться, что таблица существует.

SELECT columnfamily_name
FROM system.schema_columnfamilies WHERE keyspace_name='keyspaceName';
person Lyuben Todorov    schedule 21.04.2013
comment
Здравствуйте, спасибо за ваш ответ. Однако мой вопрос заключается в том, как проверить значение Почему в перехваченном исключении во время выполнения, а не в том, что означает это точное исключение, потому что я уже знал, что вы объяснили. Я знаю, что должен избегать подобных вещей в своем коде, и я это делаю. Однако я предпочитаю создавать осмысленные исключения, если происходит что-то, чего не должно было произойти. Это всего лишь предположение, что вещи, которые никогда не должны произойти, могут произойти, и я должен быть к этому готов. В реалистичном сценарии это исключение никогда не должно возникать при выполнении CQL, но я хочу быть готовым. - person user1809566; 27.04.2013