2

我正在尝试使用 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 的实例,当我检查 database.IsMirroringEnabled 时出现异常:

指数数组的边界之外。

堆栈跟踪是:在 Microsoft.SqlServer.Management.Smo.PropertyCollection.LookupID(String propertyName, PropertyAccessPurpose pap) 在 Microsoft.SqlServer.Management 的 Microsoft.SqlServer.Management.Smo.SqlPropertyMetadataProvider.PropertyNameToIDLookupWithException(String propertyName, PropertyAccessPurpose pap)。 Smo.PropertyCollection.GetValueWithNullReplacement(String propertyName, Boolean throwOnNullValue) 在 Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(String propertyName) 在 Microsoft.SqlServer.Management.Smo.Database.get_IsSystemObject() 在 RBC.StockManagement.CommunicationService.DatabaseBackup .BackupDatabase(String databseName, String backupDirectory) 在 D:\Work\Trunk\RBC.StockManagement\RBC.StockManagement.CommunicationService\DatabaseBackup.cs:line 85

我要备份的数据库是从 SqlServer 2005 创建的,我的操作系统在 x64 架构上运行。2005(开发者版)、2008(速成版)和2012(速成版)这三个实例都在同一台计算机上。

4

1 回答 1

4

这篇 MSDN 文章中可以看出,SQL Server 2012 附带了新的 SMO DLL,如果您尝试使用旧的连接到 2012 实例,它将无法工作。

必须删除旧版本 SQL Server 中对 SMO dll 的引用,并且必须包含对 SQL Server 2012 提供的新 SMO dll 的引用。

至少,您将参考以下内容:

  • Microsoft.SqlServer.ConnectionInfo

  • 微软.SqlServer.Smo

  • Microsoft.SqlServer.Management.Sdk.Sfc

这篇相关的 Connect 文章特别提到了您尝试连接的错误 - 所以我猜这是同一个问题。MS在那里说他们不会更新旧的以允许他们连接到2012,所以我想更新到新的SMO DLL是你最好的选择。

来自常规 SO 贡献者 Aaron bertrand:

微软关于前向兼容性(不会修复)和后向兼容性(Denali SSMS 将能够管理 2000、2005、2008、2008 R2)的官方立场见此项目: http ://connect.microsoft.com/SQLServer/feedback /详细信息/622441

(Denali 是 2012 年发布之前的代号,以防你不知道)。

于 2013-01-09T10:43:03.920 回答