我使用.NET 4.5.1和sql Server 2012 Express在
Windows 8.1设备上开发了一段时间的C#/ sql Server应用程序.这一切都完美无瑕.最近,Visual Studio 2015已经发布,我决定升级.我还决定升级我的sql Server 2012,所以我支持所有内容,卸载它并安装了sql Server 2014 Express.配置完所有内容并恢复数据库备份后,所有内容仍在本地工作,因为数据库连接数据仍存在于存储的应用程序设置中.
当我在另一台设备上测试应用程序时,我发现它无法再连接到sql Server实例,并且无法使用它来检测它
System.Data.DataTable instances = sqlDataSourceEnumerator.Instance.GetDataSources();
应用程序也无法检测到我的开发机器上的sql Server实例,我认为这很奇怪,因为它在本地运行.但是,其他几个设备可以检测sql Server,因此我认为它不是防火墙相关程序. sql引擎服务和浏览器服务都是活动的.
我决定升级到Windows 10,重置它(干净安装,没有安装任何sql Server程序)并再次运行我的应用程序,因为我的网络中有其他运行sql Server的计算机,希望它能检测到这些.它没有. GetDataSources()方法在瞬间返回一个空的DataTable,而其他设备需要几秒钟来检测实例并返回正确的列表.
更愚蠢的是ODBC数据源管理器确实检测到这些网络实例,让我觉得它是一个与.NET相关的程序.
简介:两个设备不检测任何sql Server实例(甚至是本地),而网络中的其他设备则检测到.
解决方法
我决定使用
this ODBC implementation,因为它正常工作,并且可以实现异步/等待更新,因此它不会阻止UI.
在选择这个实现之前,我还使用sqlDataSourceEnumerator类进行了另一个项目,它完美地运行.其Target框架属性设置为.NET Framework 2.0.我发现当.NET目标版本为3.5或更低时,sqlDataSourceEnumerator会给出预期的结果(在我的机器上). .NET实现中的某些内容可能会随着时间的推移而发生变化,导致它在某些特定条件下停止工作.
编辑:在我的机器上我再次安装了sql Server 2012,一切(除了检测,将使用ODBC)再次正常工作.我要感谢大家的意见.