SQL Server 2008 R2 - .NET Framework未处理的异常

9
我已在新电脑上安装了SQL Server 2008 R2。一切都很正常,直到我开始从我的旧电脑上的SQL Server 2008 R2管理工具导出注册服务器。当我将其中一个注册服务器导入到我的新安装中时,我收到了一个错误“密钥不适用于指定状态”。
现在,每次我尝试打开新安装中的注册服务器时,都会出现.NET框架未处理异常,提示相同的消息。注册服务器区域完全为空。现在没有任何方法添加任何注册服务器。我已经尝试重新安装SQL,但错误仍然存在。显然与导入过程有关。也许某些内容已损坏。有人知道如何修复它吗?
编辑:来自异常对话框的详细信息
See the end of this message for details on invoking 
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.Security.Cryptography.CryptographicException: Key not valid for use in specified state.

   at System.Security.Cryptography.ProtectedData.Unprotect(Byte[] encryptedData, Byte[] optionalEntropy, DataProtectionScope scope)
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.ProtectData(String input, Boolean encrypt)
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.get_SecureConnectionString()
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.get_ConnectionString()
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServer.get_ServerName()
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServerTree.AddRegisteredServerNode(RegisteredServer regSrv, TreeNodeCollection nodes)
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServerTree.AddServerGroupToNodeCollection(ServerGroup group, TreeNodeCollection nodes, Boolean createRecursively)
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServerTree.AddServerGroupToNodeCollection(ServerGroup group, TreeNodeCollection nodes, Boolean createRecursively)
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServerTree.Initialize(ServerGroup localServerGroup, ServerType serverType, IServerType connDlgServerType, AddCentralManagementServerDelegate onAddCentralManagementServer, AddNewCentralManagementServerDelegate onAddNewCentralManagementServer, DeleteCentralManagementServerDelegate onDeleteCentralManagementServer, GetServiceProviderDelegate onGetService)
   at Microsoft.SqlServer.Management.RegisteredServers.RegisteredServerControl.RegisteredServerControl_Load(Object sender, EventArgs e)
   at System.Windows.Forms.UserControl.OnLoad(EventArgs e)
   at System.Windows.Forms.UserControl.OnCreateControl()
   at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
   at System.Windows.Forms.Control.CreateControl()
   at System.Windows.Forms.Control.WmShowWindow(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ContainerControl.WndProc(Message& m)
   at System.Windows.Forms.UserControl.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

这个解决方案对我很有效。 - MHS
5个回答

15

听起来像是你的Windows个人配置文件中的某些问题(例如在Windows 7上的Users/[用户名]/AppData/Roaming文件夹)。你是否尝试清除其中的SQL Server条目?

Alan


1
谢谢Alan,正确无误。有问题的文件是RegSrvr.xml。我将其重命名并重新启动了SQL Server。错误已经消失了。我会继续手动添加我的注册服务器! - user718982
对我也起作用了,但我的文件夹路径是\Users\[用户名]\AppData\Microsoft\Microsoft SQL Server。另外,由于我所在的域配置方式,该文件夹并不在我的本地机器上,而是在网络驱动器上。 - Molomby
谢谢Alan,清除RegSrvr.xml后这对我也起作用了。 - zakirhas7
已删除文件RegSrvr.xml,但现在登录后出现空错误,并且在Databases下未显示任何数据库。 - SeanClt

5

对我来说,RegSrvr.xml文件也是个问题。但我并没有删除整个文件,而是编辑了它以删除加密的密码字符串。之后,管理工具正常打开,并且所有导入的服务器都出现了。


太棒了!这就是解决方案。 - mghaoui
同样地,我从Sql Server Management Studio中导出了注册信息,但第二次我指定了“不在导出文件中包含用户名和密码”。然后,它成功地导入到我的新版本中,而不是出现错误。因此,似乎将密码包含在SSMS导出文件中会出现问题。 - Eric Barr

2

我有一个非常类似的情况。完全相同的观察结果 - 但与导入无关。我已经完全重新安装了Windows 7和SQL(开发者版)。我从重建之前恢复了我的个人资料,因此它与安装不同步。我删除了C:\Users\John\AppData\Roaming\Microsoft\Microsoft SQL Server,问题就解决了。


0

还有一件事情需要检查 - 无法将导出的定义导入到较早版本的 SQL Management Studio 中。例如,从 MSSMS2012 导出并尝试在 MSSMS2008R2 中导入,你将会收到相同的“密钥无法使用”的错误信息。


0
还有一件事要检查 - 对我来说,是因为 SQL Server 的驱动器上没有足够的磁盘空间。清理空间解决了所有问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接