在C#中了解我的SQL Server实例是否支持快照?

在C#中了解我的SQL Server实例是否支持快照?,c#,.net,sql-server,tsql,C#,.net,Sql Server,Tsql,我想写一个c代码来生成一个(如果有的话)。自SQL Server 2005版起,此功能就受到支持,但仅在Enterprise edition中受支持,而在Express或Standard edition中不受支持 我的问题:如何在C#中找出连接的服务器是否支持快照备份(Enterprise Edition 2005或更新版本,还是某种“hasFeature(…)) 我当前的解决方案围绕以下代码进行了尝试 sqlCommand.CommandText = String.Format("CREATE

我想写一个c代码来生成一个(如果有的话)。自SQL Server 2005版起,此功能就受到支持,但仅在Enterprise edition中受支持,而在Express或Standard edition中不受支持

我的问题:如何在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?),但这将创建对项目的额外依赖


第三种最好的方法是某种异常处理。

您当然可以这样做:

SELECT  
   SERVERPROPERTY('productversion') as 'Product Version', 
   SERVERPROPERTY('engineedition') as 'Engine Edition'
产品版本将提供如下字符串:
10.50.1600.1
。SQL Server 2005是版本9,因此任何以
9,09.
10,11.
开头的内容都可以


engineedition
为您提供了一个
INT
(1=personal/MSDE/Express,2=standard,3=enterprise/developer)。

问题中的链接列出了快照可能无法工作的许多潜在原因,即使引擎支持快照。我认为“吸一口,看一看”“您已经使用的方法可能是确定快照备份是否切实可行的最可靠的方法