我正在尝试使用 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(速成版)这三个实例都在同一台计算机上。