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

时间:2011-01-27 10:25:11

标签: c# .net sql-server tsql

我想编写c#代码以制作snapshot-backup (如果可用)。从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();

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

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

理想的解决方案是sqlCommand.ExecuteNonQuery(),以确定是否支持该功能。

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

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

1 个答案:

答案 0 :(得分:5)

你当然可以这样做:

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

Product Version将为您提供如下字符串:10.50.1600.1。 SQL Server 2005是版本9,因此任何以9., 09.10., 11.开头的内容都可以。

Engine Edition为您提供INT(1 =个人/ MSDE / Express,2 =标准,3 =企业/开发人员)。