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.
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 * –