无法远程连接到SQL Server

时间:2015-09-17 09:43:04

标签: sql-server wpf sql-server-2008 deployment connection-string

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

The Underlying Provider failed on Open

enter image description here

The system can not find the file specified

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

enter image description here

计算机上的防火墙(安装/托管SQL服务器)已关闭。这是我的连接字符串

<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 server或SQL Server Management studio或任何特殊内容

1 个答案:

答案 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=&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. 您需要在connectionstring中指定端口。如上所述here
  2. 变化:

    data source=IMCCIT101\SQLEXPRESS;
    

    为:

    data source=IMCCIT101\SQLEXPRESS,1433;
    

    您还需要确保Windows防火墙打开端口1433。您可以使用Telnet之类的简单工具来测试您是否可以连接到IMCCIT101上的端口1433。

    还要确保客户端有工作DNS,因此可以找到IMCCIT101的IP地址。

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

      integrated security=True;
      

      还要指定sa用户的凭据(请参阅下文,了解您不应该执行此操作的其他原因)。

      我认为您在笔记本电脑上托管数据库,因此您无法或至少不轻易使用Windows集成安全性。因此,改变“综合安全”。到:

       integrated security=False;
      

      安全通知:

      您为其他计算机上的用户提供SQL Server的sa凭据。您是否知道拥有此凭据的任何人都可以使用您的SQL服务器执行任何操作,包括删除数据库等。

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

      你仍然没有完全在那里,因为他们的密码将以纯文本形式存储在他们的机器上。

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