无法远程连接到 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="data source=IMCCIT101\SQLEXPRESS;initial catalog=TPM;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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="
data source=IMCCIT101\SQLEXPRESS,1433;
initial catalog=TPM;integrated security=True;
MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
到主应用程序的app.config
。
您的连接字符串有 2 个问题。
- 您需要在连接字符串中指定端口。如上所述here
变化:
data source=IMCCIT101\SQLEXPRESS;
至:
data source=IMCCIT101\SQLEXPRESS,1433;
您还需要确保端口 1433 已被 windows 防火墙打开。您可以使用像 Telnet
这样的简单工具来测试您是否可以连接到 IMCCIT101 上的端口 1433。
还要确保客户端有可用的 DNS,这样才能找到 IMCCIT101 的 IP 地址。
- 您指定了两种不同的身份验证方法!
你说:
integrated security=True;
还要指定 sa 用户的凭据(请参阅下文了解您不应该这样做的其他原因)。
我假设您在笔记本电脑上托管数据库,因此您不能或至少不容易使用 windows 集成安全性。因此,将“集成安全”更改为:
integrated security=False;
安全须知:
您向其他计算机上的用户提供您的 SQL 服务器的 sa
凭据。您是否知道拥有此凭据的任何人都能够对您的 SQL 服务器执行几乎任何操作,包括删除数据库等
Windows 集成安全性是连接数据库的首选方式。如果这不是一个选项,请为您的用户创建 sql 个用户!
您仍然不会完全了解,因为他们的密码将以明文形式存储在他们的机器上。
换句话说,如果可以,在 Active Directory 环境中的中央服务器上托管 SQL 服务器数据库,这样您就可以使用集成安全性。
我在本地计算机上有一个功能齐全的 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="data source=IMCCIT101\SQLEXPRESS;initial catalog=TPM;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" 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="
data source=IMCCIT101\SQLEXPRESS,1433;
initial catalog=TPM;integrated security=True;
MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
到主应用程序的app.config
。
您的连接字符串有 2 个问题。
- 您需要在连接字符串中指定端口。如上所述here
变化:
data source=IMCCIT101\SQLEXPRESS;
至:
data source=IMCCIT101\SQLEXPRESS,1433;
您还需要确保端口 1433 已被 windows 防火墙打开。您可以使用像 Telnet
这样的简单工具来测试您是否可以连接到 IMCCIT101 上的端口 1433。
还要确保客户端有可用的 DNS,这样才能找到 IMCCIT101 的 IP 地址。
- 您指定了两种不同的身份验证方法!
你说:
integrated security=True;
还要指定 sa 用户的凭据(请参阅下文了解您不应该这样做的其他原因)。
我假设您在笔记本电脑上托管数据库,因此您不能或至少不容易使用 windows 集成安全性。因此,将“集成安全”更改为:
integrated security=False;
安全须知:
您向其他计算机上的用户提供您的 SQL 服务器的 sa
凭据。您是否知道拥有此凭据的任何人都能够对您的 SQL 服务器执行几乎任何操作,包括删除数据库等
Windows 集成安全性是连接数据库的首选方式。如果这不是一个选项,请为您的用户创建 sql 个用户!
您仍然不会完全了解,因为他们的密码将以明文形式存储在他们的机器上。
换句话说,如果可以,在 Active Directory 环境中的中央服务器上托管 SQL 服务器数据库,这样您就可以使用集成安全性。