2011-01-27 4 views
5

Je veux écrire le code C# pour faire un snapshot-backupsi disponible. Ceci est pris en charge depuis SQL Server version 2005, mais uniquement dans l'édition Enterprise mais pas dans Express ou Standard.Déterminez en C# si mon instance SQL Server prend en charge les instantanés?

Ma question: comment trouver dans C# si le serveur connecté prend en charge la sauvegarde de l'instantané (est Enterprise Edition 2005 ou plus récent ou une sorte de « hasFeature (...))

Ma solution actuelle met un essai? attraper autour du code ci-dessous.

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

Si je prends un SqlException Je suppose qu'il n'y a pas de soutien sur le serveur connecté.

Mais peut-être il pourrait y avoir d'autres raisons à l'échec même si la base de données prend en charge les instantanés (c.-à quelque chose est verrouillé , la connexion est cassée, ...)

La solution idéale serait un sqlCommand.ExecuteNonQuery() pour savoir si la fonctionnalité est supportée.

Le deuxième meilleur est si j'ai dû inclure une DLL supplémentaire qui peut le trouver (? Sqldmo?) Mais cela créerait une dépendance supplémentaire au projet.

Le troisième meilleur serait une sorte de gestion des exceptions.

+0

Le lien de votre question répertorie de nombreuses raisons pouvant expliquer pourquoi l'instantané peut ne pas fonctionner, même si le moteur le prend en charge. Je pense que l'approche "sucer et voir" que vous utilisez déjà est probablement le moyen le plus fiable de déterminer si les sauvegardes de clichés sont réellement * possibles * –

Répondre

5

Vous pouvez certainement faire quelque chose comme ceci:

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

Le Product Version vous donnera une chaîne comme ceci: 10.50.1600.1. SQL Server 2005 est la version 9, donc tout ce qui commence par 9., 09. ou 10., 11. ira bien. Le Engine Edition vous donne un INT (1 = personnel/MSDE/Express, 2 = standard, 3 = entreprise/développeur).

Questions connexes