在sql server 2005,2008,2012上使用smo进行数据库收集

时间:2013-01-09 09:46:09

标签: c# sql-server smo database-backups

我正在尝试使用smo获取数据库集合,如下所示:

var server = GetDatabaseServer();

DatabaseCollection databaseCollection = server.Databases;

foreach (Database database in databaseCollection)
{
    if (String.Equals(database.Name, databseName, 
        StringComparison.OrdinalIgnoreCase))
    {
        if (database.IsSystemObject == false && 
            database.IsMirroringEnabled == false)
        {
            if (IsTimeForBackup(database.LastBackupDate)) 
                Backup(database, server, backupDirectory);
            break;
        }    
    }
}

如果SqlServer是2005或2008,这将有效。如果我尝试连接到2012的实例,我检查数据库时会出现异常.IsMirroringEnabled:

索引超出了数组的范围。

  

堆栈跟踪是:at   Microsoft.SqlServer.Management.Smo.SqlPropertyMetadataProvider.PropertyNameToIDLookupWithException(字符串   propertyName,PropertyAccessPurpose pap)at   Microsoft.SqlServer.Management.Smo.PropertyCollection.LookupID(字符串   propertyName,PropertyAccessPurpose pap)at   Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(字符串   propertyName,Boolean throwOnNullValue)at   Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(字符串   propertyName)at   Microsoft.SqlServer.Management.Smo.Database.get_IsSystemObject()at   RBC.StockManagement.CommunicationService.DatabaseBackup.BackupDatabase(字符串   databseName,String backupDirectory)in   d:\工作\干线\ RBC.StockManagement \ RBC.StockManagement.CommunicationService \ DatabaseBackup.cs:行   85

我尝试备份的数据库是从SqlServer 2005创建的,我的操作系统是在x64架构上运行的。 2005年(开发人员版),2008年(快车版)和2012年(快车版)的所有三个实例都在同一台计算机上。

1 个答案:

答案 0 :(得分:3)

this MSDN article看,SQL Server 2012附带了新的SMO DLL,如果您尝试使用旧版本连接到2012年的实例,它将无效。

  

旧版SQL Server中对SMO dll的引用必须是   已删除,以及对SQL提供的新SMO dll的引用   必须包含Server 2012。

     

最低限度,您可以参考以下内容:

     
      
  • Microsoft.SqlServer.ConnectionInfo

  •   
  • Microsoft.SqlServer.Smo

  •   
  • Microsoft.SqlServer.Management.Sdk.Sfc

  •   

This related Connect article特别提到了你试图连接的错误 - 所以我猜这是同样的问题。 MS说那里他们不会更新旧版本以允许他们连接到2012,所以我想更新到新的SMO DLL是你最好的镜头。

来自常规SO贡献者Aaron bertrand:

  

请参阅此项目,了解微软关于前进的官方立场   兼容性(不会修复)和向后兼容性(Denali   SSMS将能够管理2000年,2005年,2008年,2008年R2):   http://connect.microsoft.com/SQLServer/feedback/details/622441

(Denali是2012年发布之前的代码名称,如果您不知道的话)。