2011-01-27 6 views
5

Desidero scrivere il codice C# per creare un snapshot-backupse disponibile. Questo è supportato da SQL Server versione 2005 ma solo in edizione Enterprise ma non in versione Express o Standard.Scoprire in C# se la mia istanza di SQL Server supporta le istantanee?

La mia domanda: come scoprire in C#, se il server collegato supporta il backup di snapshot (è Enterprise Edition 2005 o più recente o un qualche tipo di "hasFeature (...))

mia soluzione attuale mette una prova? prendere in giro il seguente codice.

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

Se prendo un SqlException presumo non c'è alcun supporto sul server connesso.

Ma forse ci potrebbero essere altre ragioni per fallire, anche se il database supporta gli snapshot (cioè qualcosa è bloccato , la connessione è interrotta, ...)

La soluzione ideale sarebbe un po 'di sqlCommand.ExecuteNonQuery() per scoprire se la funzione è supportata.

Il secondo migliore è se dovessi includere qualche dll extra che può trovarlo (? Sqldmo?) Ma ciò creerebbe un'ulteriore dipendenza dal progetto.

Il terzo migliore sarebbe una sorta di gestione delle eccezioni.

+0

Il collegamento nella tua domanda elenca un sacco di potenziali motivi per cui lo snapshot potrebbe non funzionare, anche se il motore lo supporta. Penso che l'approccio "succhiare e vedere" che stai già utilizzando sia probabilmente il modo più affidabile per determinare che i backup di istantanee siano effettivamente * possibili * –

risposta

5

si potrebbe certamente fare qualcosa di simile:

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

Il Product Version vi darà una stringa come questa: 10.50.1600.1. SQL Server 2005 è la versione 9, quindi tutto ciò che inizia con 9., 09. o 10., 11. andrà bene.

Il Engine Edition fornisce uno INT (1 = personale/MSDE/Express, 2 = standard, 3 = impresa/sviluppatore).

Problemi correlati