我在本地计算机上运行了一个功能完备的WPF应用程序,其中SQL Server 2008作为数据库。 SQL Server Management studio也在我的机器上设置。现在我希望我的应用程序可以通过公司网络访问,以便其他用户可以使用我的应用程序。我已经在另一台Windows 7计算机上创建了安装屏蔽,但是在使用EntityFramework 6.0
进行数据库调用时启动了应用程序我收到了这些错误消息(exceptions/inner exceptions)
。
The Underlying Provider failed on Open
The system can not find the file specified
我在SQL Server配置管理器中启用了TCP / IP,端口设置为1433. SQL Server命名实例,这就是配置管理器的样子
计算机上的防火墙(安装/托管SQL服务器)已关闭。这是我的连接字符串
<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 server或SQL Server Management studio或任何特殊内容
答案 0 :(得分:2)
<强>更新强>
事实证明,在聊天之后,问题出现了很大的不同。
domainmodel位于单独的程序集中,连接字符串config仅位于此类库的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个问题。
变化:
data source=IMCCIT101\SQLEXPRESS;
为:
data source=IMCCIT101\SQLEXPRESS,1433;
您还需要确保Windows防火墙打开端口1433。您可以使用Telnet
之类的简单工具来测试您是否可以连接到IMCCIT101上的端口1433。
还要确保客户端有工作DNS,因此可以找到IMCCIT101的IP地址。
你说:
integrated security=True;
还要指定sa用户的凭据(请参阅下文,了解您不应该执行此操作的其他原因)。
我认为您在笔记本电脑上托管数据库,因此您无法或至少不轻易使用Windows集成安全性。因此,改变“综合安全”。到:
integrated security=False;
安全通知:
您为其他计算机上的用户提供SQL Server的sa
凭据。您是否知道拥有此凭据的任何人都可以使用您的SQL服务器执行任何操作,包括删除数据库等。
Windows集成安全性是连接数据库的首选方式。如果这不是一个选项,请为您的用户创建sql用户!
你仍然没有完全在那里,因为他们的密码将以纯文本形式存储在他们的机器上。
换句话说,如果可以,可以在Active Directory环境中的中央服务器上托管SQL Server数据库,这样就可以使用集成安全性。