. net没有检测到任何SQL Server实例

本文关键字:SQL Server 实例 任何 检测 net | 更新日期: 2023-09-27 18:07:45

我一直在Windows 8.1设备上开发c#/SQL Server应用程序,使用。net 4.5.1和SQL Server 2012 Express。一切都完美无缺。最近,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相关的程序。

Summary:两个设备不检测任何 SQL Server实例(即使是本地),而网络中的其他设备可以。

. net没有检测到任何SQL Server实例

我决定使用这个ODBC实现,因为它工作正常,并且可以实现async/await更新,因此它不会阻塞UI。

在选择这个实现之前,我还使用SqlDataSourceEnumerator类研究了另一个项目,它工作得很好。它的Target框架属性被设置为。net framework 2.0。我发现,当. net目标版本为3.5或更低时,SqlDataSourceEnumerator提供了预期的结果(在我的机器上)。. net实现中的某些东西可能随着时间的推移而改变,导致它在某些特定条件下停止工作。

编辑:在我的机器上,我再次安装了SQL Server 2012,一切(除了检测,将使用ODBC)再次工作正常。

作为一个补充,我们有一个类似的问题后VS2015/。Net 4.6安装。我们的开发人员使用SQL Express 2012 x64(大多数情况下是默认实例,或者在某些情况下是命名实例,但Express默认是命名实例SQLEXPRESS)和别名来从连接字符串中删除任何机器名称变化(生产使用DNS条目)。别名设置为使用TCP/IP,服务器名称为localhost'instance。

但是4.6削弱了别名的使用,使用别名时实体框架无法连接,SSMS也无法连接。如果我删除了4.6并修复了4.5.2,它似乎被4.6安装损坏了,那么我们可以在SSMS和我们的应用程序中使用别名,前提是我们自2015年以来使用VS2013需要4.6。这就否定了尝试升级的意义。

我不知道到底是什么原因导致了这个问题,但我知道使用你在别名中使用的计算机的FQDN工作。获取实例的端口号并显式地在别名中设置它也可以解决这个问题,但是如果您使用的是动态端口分配(默认情况下是这样做的),那么这个问题很快就会解决。或者,如果你有一个完整版的SQL服务器的默认安装,它似乎继续工作良好的别名只是设置为localhost, (local).

我最好的猜测是。net 4.6中的一些变化在某种程度上影响了SQL浏览器服务,因为如果他们使用动态端口,这应该负责将请求路由到正确的实例。当然,有人可能会认为应该始终显式地设置静态端口号,但是谁会这样做呢?我曾尝试在Connect上提高它,以防这是某种bug,但我不确定。

<标题>编辑

提出了一个连接问题,因为我认为这是真正影响SQL浏览器。

https://connect.microsoft.com/VisualStudio/feedback/details/1719418