我想编写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?),但这会为项目创建一个额外的依赖。
第三好的是某种异常处理。
答案 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 =企业/开发人员)。