2012-04-04 60 views
0

好吧,我很難過。我正嘗試創建一個.NET Winforms應用程序,以通過實體框架與數據庫交談。我最初創建了一個ASP.NET MVC3應用程序(帶有單獨的DAL層),可以在最初失敗後與數據庫交談。所以它第一次嘗試打開連接,它超時。如果我在瀏覽器中點擊F5,它連接正常! 我在Winforms應用程序中引用了此DAL。實體例外:底層提供程序無法使用超時打開

  • 我可以通過SQL管理工作室中的SQL驗證連接到數據庫。
  • 我可以在VS2010中創建ADO.NET Data類(它連接,獲取表並將連接字符串存儲在app.config中)。
  • 但是,一旦我運行Winforms應用程序,我無法連接。我得到了一個帶有「Timeout過期」的InnerException的異常。

我將連接字符串從web.config複製到app.config。

SQL數據庫託管在我的Windows Home Server上,名爲SERVER。我在一個工作組(無域)。我在Management Studio和VS中使用SERVER \ SQLEXPRESS成功連接到它。

事情我已經嘗試:

  • 禁用客戶機上的防火牆。
  • 在服務器上啓用DTC,並將msdtc.exe添加到服務器上的排除列表中。
  • 確保在SQL服務器實例上啓用命名管道。
  • 嘗試了不同的SQL用戶。
  • 嘗試在C#中構建連接的不同方式。
  • 爲我的WinForms項目生成一個新的ADO.NET Data類(不引用DAL)。 VS連接正常,讀取表格,生成代碼。但正在運行的應用程序會導致「Timeout Expired」SqlException。

因此,運行應用程序連接失敗。當我在ProcessExplorer中觀看應用程序時,當它嘗試使用SYN_SENT消息在遠程端口4845上進行連接時,我可以在TCP窗口中看到一個條目。不知道這是否正確。

我已經谷歌和bing'd過去幾天,我已經閱讀所有的文章和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=&quot;data source=SERVER\SQLEXPRESS;initial catalog=LLDB;persist security info=True;user id=sa;password=sapwd;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

讚賞任何幫助,甚至對如何弄清楚發生了什麼任何提示。

+0

你可能想改變你的sa密碼:) – 2012-04-04 21:45:37

+1

這只是一個佔位符... :-)這不是實際的一個。 – 2012-04-04 21:58:50

回答

1

您的連接字符串看起來更像是到SQL Server的連接字符串,而不是SQL Express。

看一看這對於一個連接字符串到SQL Express:SQL Server Express connection string for Entity Framework Code First

+0

嗯。該頁面在我的ConnectionString中說有一個「Database =」或「Initial Catalog =」,我這樣做。請注意,SQL Server在另一臺機器上。如果我添加「AttachDBFilename =」字段,則連接將失敗,並且「...提供程序無法在ConnectionString上打開。」。 – 2012-04-04 22:42:19

+0

當您通過SQL Management Studio訪問數據庫時,您是否使用Windows身份驗證? – 2012-04-05 09:04:52

+0

不,SQL驗證,如上所述。 – 2012-04-05 17:17:02

相關問題