Узнайте в C #, поддерживает ли мой экземпляр SQL Server моментальные снимки? - PullRequest
5 голосов
/ 27 января 2011

Я хочу написать код C #, чтобы сделать резервную копию снимка , если доступно .Это поддерживается начиная с версии SQL Server 2005, но только в редакции Enterprise, но не в версии Express или Standard.

Мой вопрос: как узнать в C #, поддерживает ли подключенный сервер резервное копирование моментальных снимков (Enterprise Edition 2005 или более поздняя версия или что-то вроде hasFeature (...))?

Мой текущийРешение ставит попытку поймать следующий код:

sqlCommand.CommandText = String.Format("CREATE DATABASE {0} ON " +
    (NAME = {1}, FILENAME = \"{2}\" ) AS SNAPSHOT OF {1}",
        databaseBackupName,
        databaseName,
        filenameOfDatabseBackup);
sqlCommand.ExecuteNonQuery();

Если я поймаю SqlException, я предполагаю, что на подключенном сервере нет поддержки.

Но, возможно, могут быть и другие причиныпотерпеть неудачу, хотя база данных поддерживает моментальные снимки (то есть что-то заблокировано, соединение разорвано, ...)

Идеальным решением было бы несколько sqlCommand.ExecuteNonQuery(), чтобы выяснить, поддерживается ли эта функция.

Второй вариант - если бы мне пришлось добавить какую-нибудь дополнительную dll, которая может его найти (? Sqldmo?), Но это создаст дополнительную зависимость от проекта.

Третий вариант - это какая-то обработка исключений.

1 Ответ

5 голосов
/ 27 января 2011

Вы, безусловно, можете сделать что-то вроде этого:

SELECT  
   SERVERPROPERTY('productversion') as 'Product Version', 
   SERVERPROPERTY('engineedition') as 'Engine Edition'

Product Version даст вам строку, подобную этой: 10.50.1600.1.SQL Server 2005 является версией 9, поэтому все, что начинается с 9., 09. или 10., 11., подойдет.

Engine Edition дает вам INT (1 = персональный / MSDE / Express, 2 =стандарт, 3 = предприятие / разработчик).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...