【发布时间】:2013-01-09 09:46:08
【问题描述】:
我正在尝试使用 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.SqlPropertyMetadataProvider.PropertyNameToIDLookupWithException(字符串 propertyName, PropertyAccessPurpose pap) 在 Microsoft.SqlServer.Management.Smo.PropertyCollection.LookupID(字符串 propertyName, PropertyAccessPurpose pap) 在 Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(字符串 propertyName, Boolean throwOnNullValue) 在 Microsoft.SqlServer.Management.Smo.PropertyCollection.GetValueWithNullReplacement(字符串 属性名称)在 Microsoft.SqlServer.Management.Smo.Database.get_IsSystemObject() 在 RBC.StockManagement.CommunicationService.DatabaseBackup.BackupDatabase(字符串 数据库名称,字符串备份目录)在 D:\Work\Trunk\RBC.StockManagement\RBC.StockManagement.CommunicationService\DatabaseBackup.cs:line 85
我要备份的数据库是从 SqlServer 2005 创建的,我的操作系统在 x64 架构上运行。 2005(开发者版)、2008(速成版)和2012(速成版)这三个实例都在同一台计算机上。
【问题讨论】:
-
This will work if the SqlServer is 2005 or 2008. If i try to connect to an instance of 2008, i am getting an exception- 这句话没有任何意义 - 你的意思是当你连接到 2008 R2 或 2012 的实例时?否则与上句相矛盾。 -
谢谢!我纠正了!我试图连接到 2012 实例。
标签: c# sql-server smo database-backups