次のように、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 をチェックするときに例外が発生します。
インデックスが配列の範囲外だった。
スタック トレースは次のとおりです。 RBC.StockManagement.CommunicationService.DatabaseBackup で Microsoft.SqlServer.Management.Smo.Database.get_IsSystemObject() で Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(String propertyName) で Smo.PropertyCollection.GetValueWithNullReplacement(String propertyName, Boolean throwOnNullValue) .BackupDatabase(String databseName, String backupDirectory) in D:\Work\Trunk\RBC.StockManagement\RBC.StockManagement.CommunicationService\DatabaseBackup.cs:line 85
バックアップしようとしているデータベースは SqlServer 2005 から作成されており、オペレーティング システムは x64 アーキテクチャで実行されています。2005 (開発者版)、2008 (高速版)、および 2012 (高速版) の 3 つのインスタンスはすべて同じコンピューター上にあります。