2011-10-13 210 views
0

我使用的是包含mySQL數據庫的godaddy虛擬主機服務;連接超時問題

我正在使用visual studio 2010開發我的web應用程序使用asp.net和c#。

我配置爲直接訪問(遠程訪問),但一半我得到這個異常時的數據庫:

"Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding."

我試圖找出如果我的代碼錯誤或原因是在服務器,這是我的代碼:

我在web.config中的連接字符串

 <add name="GameDataServer" 
     connectionString="Server=<server host>; Port=3306; Database=<database name>; Uid=<uid>; Pwd=<password>; pooling=false;" 
     providerName="MySql.Data.MySqlClient;Connection Timeout=10; default command timeout=800;" /> 

我拉數據代碼:

MySqlConnection myConnection; 
     MySqlDataAdapter myDataAdapter; 
     string strSQL; 
     myConnection = new MySqlConnection(this.connectionString); 
     strSQL = "SELECT * FROM table1"; 


     myDataAdapter = new MySqlDataAdapter(strSQL, myConnection); 
     DataSet myDataSet = new DataSet(); 
     try 
     { 
      myDataAdapter.Fill(myDataSet, "table1"); 
     } 

任何幫助表示讚賞

感謝

多倫

+0

你應該使用連接池。 pooling = true –

+0

table1有多大?嘗試「SELECT TOP(1)* FROM table1」,看看你是否仍然有問題。 – christofr

+0

您是否關閉並處置所有涉及的對象,如連接? –

回答

0

從你的代碼片段看來,它看起來並不像你實際上在處理你的連接 - 你是在一個我們看不到的地方做一個finally塊?如果不是,這可能會解釋您的問題的間歇性。推薦的做法是包裝在一個使用塊實現IDisposable任何對象(所以CLR處理正確處理的對象,它讓你的代碼乾淨得多),因爲這樣的:

using (MySqlConnection myConnection = new MySqlConnection(this.connectionString)) 
{ 
    using (SqlDataAdapter myDataAdapter = new SqlDataAdapter(strSql, myConnection)) 
    { 
     // DataSet implements IDisposable via inheritance, but don't really need to call dispose on it. 
    } 
} 

所以......也許你有一堆雜散連接是否打開?只是一個想法。

此外,請參閱是否可以確定在建立連接期間是否正在拋出錯誤,或者是否正在調用命令(SELECT * ...)。你可以嘗試增加命令超時值,但是800(我相信秒)是相當長的時間。但是,嘿,如果你有很多數據,這可能是必要的。設置爲極端值,僅用於測試;至少你可以縮小問題的範圍。

+0

另外,您可以嘗試telnet到您的sql服務器,並查看它是否拒絕了連接(可能必須嘗試一堆,因爲您的問題是間歇性的):telnet MySqlIpAddressOrHostName 3306 –

+0

這不是幫助,我認爲問題是我從視覺工作室開發過程中使用它,因爲當我上傳我的文件時,一切都運行良好 –

+0

@DoronSinai要清楚,你可以有時與你的開發環境連接?或者,你根本無法從你的開發環境連接,只有生產?您是否嘗試從您的本地環境進行Telnet,以查看您是否可以連接? –

0

嘗試啓用池,增加您的連接超時。

+0

你能解釋一下池是什麼嗎? 你能建議超時值嗎? –

+0

連接池是應用程序將重用任何現有連接的時候,這是性能優化。您在連接字符串中設置「Pooling = true」。對於超時值,請嘗試30秒。 – Matthew

+0

現在我收到以下錯誤:連接嘗試失敗,因爲連接方在一段時間後沒有正確響應,或建立的連接失敗,因爲連接的主機未能響應 –

0

我只是跑與SqlDataAdapter的同樣的問題,發現這個:

SqlDataAdapter myDataAdapter = new SqlDataAdapter(strSQL, this.connectionString); 
myDataAdapter.SelectCommand.CommandTimeout=120; // or whatever limit you want