好吧,我难住了。我正在尝试创建一个 .NET Winforms 应用程序以通过实体框架与数据库通信。我最初创建了一个 ASP.NET MVC3 应用程序(带有单独的 DAL 层),它可以在最初失败后与数据库通信。所以第一次尝试打开连接时,它会超时。如果我然后在浏览器中按 F5,则连接正常!我在我的 Winforms 应用程序中引用了这个 DAL。
- 我可以通过 SQL Management Studio 中的 SQL Auth 连接到数据库。
- 我可以在 VS2010 中创建 ADO.NET 数据类(它连接、获取表并将连接字符串存储在 app.config 中)。
- 但是,一旦我运行 Winforms 应用程序,我就无法连接。我得到了上面提到的异常,带有“超时已过期”的 InnerException。
我将连接字符串从 web.config 复制到 app.config。
SQL 数据库托管在我的称为 SERVER 的 Windows Home Server 上。我在一个工作组中(没有域)。我在 Management Studio 和 VS 中使用 SERVER\SQLEXPRESS 成功连接到它。
我尝试过的事情:
- 禁用客户端计算机上的防火墙。
- 在服务器上启用 DTC 并将 msdtc.exe 添加到服务器上的排除列表中。
- 确保在 SQL 服务器实例上启用了命名管道。
- 尝试了不同的 SQL 用户。
- 尝试了在 C# 中构建连接的不同方法。
- 在我的 WinForms 项目本地生成了一个新的 ADO.NET Data 类(不引用 DAL)。VS 连接良好,读取表格,生成代码。但是正在运行的应用程序会导致“超时已过期”SqlException。
所以运行应用程序连接不成功。当我在 ProcessExplorer 中观看应用程序时,当它尝试使用 SYN_SENT 消息连接远程端口 4845 时,我可以在 TCP 窗口中看到一个条目。不确定这是否正确。
在过去的几天里,我已经用谷歌搜索并搜索了这个,我已经阅读了 Stackoverflow 上所有提到这个异常的文章和回复,但我已经碰壁了。
这是VS读取DB后生成的ConnectionString:
<add name="LLDBEntities" connectionString="metadata=res://*/LLDB.csdl|res://*/LLDB.ssdl|res://*/LLDB.msl;provider=System.Data.SqlClient;provider connection string="data source=SERVER\SQLEXPRESS;initial catalog=LLDB;persist security info=True;user id=sa;password=sapwd;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
任何帮助表示赞赏,甚至任何关于如何弄清楚发生了什么的提示。