调用ServerConnection.Databases.Contains()报错:无法检索请求数据
SMO升级后连接SQL Server 2022报错问题记录
记录此问题,因为未找到相同成因的相关错误参考。
场景
- 调用SQL Management Objects(SMO)库枚举已安装的SQL Server数据库实例
- 环境已安装SQL Server 2022
- 原应用使用SQL Server 2016 SMO,已升级引用并配置绑定重定向
报错代码
SqlConnection connection = new SqlConnection(connBuilder.ConnectionString); ServerConnection sc = new ServerConnection(connection); Server server = new Server(sc); // 此处触发报错 if (server.Databases.Contains(databaseName))
报错信息
Microsoft.SqlServer.Management.Sdk.Sfc.EnumeratorException: 无法检索此请求的数据。 --- 内部异常堆栈跟踪开始 --- ---> Microsoft.SqlServer.Management.Sdk.Sfc.InternalEnumeratorException: Microsoft.SqlServer.Management.Smo.SqlServer 未派生自 EnumObject。 在 Microsoft.SqlServer.Management.Sdk.Sfc.ObjectCache.LoadElement(ObjectLoadInfo oli) 在 Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetServerVersion(Urn urn, Object ci) 在 Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetObjectsFromCache(Urn urn, Object ci) 在 Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetData(Request req, Object ci) 在 Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.GetData(Object connectionInfo, Request request) 在 Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request) --- 内部异常堆栈跟踪结束 --- 在 Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request) 在 Microsoft.SqlServer.Management.Smo.ExecutionManager.GetEnumeratorData(Request req) 在 Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetCollationRelatedProperties(String dbName, ContainmentType& containmentType, CatalogCollationType& catalogCollation) 在 Microsoft.SqlServer.Management.Smo.SqlSmoObject.GetDbComparer(Boolean inServer) 在 Microsoft.SqlServer.Management.Smo.SqlSmoObject.InitializeStringComparer() 在 Microsoft.SqlServer.Management.Smo.SqlSmoObject.get_StringComparer() 在 Microsoft.SqlServer.Management.Smo.AbstractCollectionBase.get_StringComparer() 在 Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase.InitInnerCollection() 在 Microsoft.SqlServer.Management.Smo.SmoCollectionBase.GetObjectByKey(ObjectKeyBase key) 在 Microsoft.SqlServer.Management.Smo.SimpleObjectCollectionBase.Contains(String name) 在 Application.clsDatabaseManagement.GetDbStatus(String connectionString) 位置 C:\Application\DatabaseManagement\DatabaseManagement.cs:行号 1404
内容的提问来源于stack exchange,提问作者DiskJunky
相关产品推荐
相关产品推荐

