无法远程连接到 SQL 服务器

Unable to connect to SQL Server remotely

我在本地计算机上有一个功能齐全的 WPF 应用程序 运行,其中 SQL Server 2008 作为数据库。 SQL 服务器管理工​​作室也在我的机器上安装。现在我希望我的应用程序可以通过公司网络访问,以便其他用户可以使用我的应用程序。我已经在另一台 windows 7 机器上创建了任何安装应用程序的安装屏蔽,但是在使用 EntityFramework 6.0 进行数据库调用时启动应用程序时,我收到这些错误消息 (exceptions/inner exceptions).

The Underlying Provider failed on Open

The system can not find the file specified

我在 SQL 服务器配置管理器中启用了 TCP/IP,端口设置为 1433。SQL 服务器命名实例,这就是配置管理器的样子

机器上的防火墙(SQL 服务器在 installed/hosted 上)已关闭。这是我的连接字符串

<connectionStrings>
<add name="TestPacksContext" connectionString="metadata=res://*/TestPacksModel.csdl|res://*/TestPacksModel.ssdl|res://*/TestPacksModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=IMCCIT101\SQLEXPRESS;initial catalog=TPM;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

所以我相信我已经启用了我应该启用的所有设置,但我仍然无法连接到 SQL 服务器。

P.S: 我没有在客户端机器上安装 Sql 服务器或 SQL 服务器管理工​​作室或任何特殊的东西

更新:

聊天后发现,问题完全不同。 域模型位于单独的程序集中,连接字符串配置仅位于此 class 库的 app.config 中。但是 AppDomain 只能有一个配置文件,参见 here

所以要修复,添加:

<connectionStrings> 
 <add name="TestPacksContext" 
    connectionString=
         "metadata=res://*/TestPacksModel.csdl|res://*/TestPacksModel.ssdl|res://*/TestPacksModel.msl; 
          provider=System.Data.SqlClient;provider connection string=&quot;
          data source=IMCCIT101\SQLEXPRESS,1433;
          initial catalog=TPM;integrated security=True;
          MultipleActiveResultSets=True;App=EntityFramework&quot;" 
          providerName="System.Data.EntityClient" /> 
 </connectionStrings>

到主应用程序的app.config

您的连接字符串有 2 个问题。

  1. 您需要在连接字符串中指定端口。如上所述here

变化:

data source=IMCCIT101\SQLEXPRESS;

至:

data source=IMCCIT101\SQLEXPRESS,1433;

您还需要确保端口 1433 已被 windows 防火墙打开。您可以使用像 Telnet 这样的简单工具来测试您是否可以连接到 IMCCIT101 上的端口 1433。

还要确保客户端有可用的 DNS,这样才能找到 IMCCIT101 的 IP 地址。

  1. 您指定了两种不同的身份验证方法!

你说:

integrated security=True;

还要指定 sa 用户的凭据(请参阅下文了解您不应该这样做的其他原因)。

我假设您在笔记本电脑上托管数据库,因此您不能或至少不容易使用 windows 集成安全性。因此,将“集成安全”更改为:

 integrated security=False;

安全须知:

您向其他计算机上的用户提供您的 SQL 服务器的 sa 凭据。您是否知道拥有此凭据的任何人都能够对您的 SQL 服务器执行几乎任何操作,包括删除数据库等

Windows 集成安全性是连接数据库的首选方式。如果这不是一个选项,请为您的用户创建 sql 个用户!

您仍然不会完全了解,因为他们的密码将以明文形式存储在他们的机器上。

换句话说,如果可以,在 Active Directory 环境中的中央服务器上托管 SQL 服务器数据库,这样您就可以使用集成安全性。