【问题标题】:Find out in C# if my SQL Server instance supports snapshots?在 C# 中找出我的 SQL Server 实例是否支持快照?
【发布时间】:2011-06-16 10:54:23
【问题描述】:

我想编写 C# 代码来创建 snapshot-backup如果可用。从 SQL Server 版本 2005 开始支持此功能,但仅在企业版中,而不在 Express 或标准版中。

我的问题:如何在 C# 中找出连接的服务器是否支持快照备份(企业版 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?) 但这会为项目创建额外的依赖项。

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

【问题讨论】:

  • 您问题中的链接列出了快照可能无法正常工作的许多潜在原因,即使引擎支持它也是如此。我认为您已经在使用的“先试试看”的方法可能是确定快照备份实际上可能的最可靠方法

标签: c# .net sql-server tsql


【解决方案1】:

你当然可以这样做:

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 = 企业/开发人员)。

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多