如果我的SQL Server实例支持快照,请在C#中查找?

k3b*_*k3b 5 .net c# t-sql sql-server

我想编写c#代码来进行快照备份( 如果可用).从SQL Server 2005版开始支持此功能,但仅限于企业版,但不支持Express或Standard版.

我的问题:如果连接的服务器支持快照备份(是Enterprise Edition 2005还是更新版或某种"hasFeature(...)),如何在C#中查找?

我目前的解决方案试图抓住以下代码.

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

如果我抓到了,SqlException我认为连接的服务器上没有支持.

但也许可能有其他原因导致失败,尽管数据库支持快照(即某些东西被锁定,连接被破坏,......)

理想的解决方案是sqlCommand.ExecuteNonQuery()找出是否支持该功能.

第二个最好的是如果我必须包含一些可以找到它的额外dll(?sqldmo?),但这会为项目创建一个额外的依赖项.

第三好的是某种异常处理.

mar*_*c_s 5

你当然可以这样做:

SELECT  
   SERVERPROPERTY('productversion') as 'Product Version', 
   SERVERPROPERTY('engineedition') as 'Engine Edition'
Run Code Online (Sandbox Code Playgroud)

Product Version会给你这样的字符串:10.50.1600.1.SQL Server 2005是版本9,所以任何开头9., 09.10., 11.将会好的.

Engine Edition给你一个INT(1 =个人/ MSDE /快递,2 =标准,3 =企业/开发者).