2012-07-16 97 views
6

我有一個查詢需要更長的時間執行,因爲數據庫的大小增加。查詢優化和必要的,但我的C#控制檯應用程序最近已經給我這個錯誤:MySqlException:超時過期 - 增加連接超時已無效

Unhandled Exception: MySql.Data.MySqlClient.MySqlException: Timeout expired. 

增加連接的time out連接字符串沒有幫助;我增加了它

Connect Timeout=28800

Connect Timeout=128800

但我仍然得到錯誤,儘管這種變化。

如果我從MySQL工作臺運行查詢只需要大約10秒,所以我不知道如何防止這個未處理的異常。

除了「查詢所花費的時間」之外,還有其他的事情可以產生這種異常嗎?

+3

你能顯示你的代碼嗎? – 2012-07-16 17:57:50

+8

更改CommandTimeout而不是ConnectionTimeout。 – 2012-07-16 18:00:09

+0

未處理的異常:System.ArgumentException:不支持的關鍵字。 參數名稱:connecttimeout at Application.MainClass.Main(String [] args) 哦,我需要更仔細地閱讀「CommandTimeout」。 – 2012-07-16 18:03:39

回答

16

我以前也有這個問題。 ConnectTimeout屬性僅適用於連接到數據庫時發生的超時,而不適用於查詢。

CommandTimeout但是,它指定應該等待查詢返回的時間。我相信默認值是30秒。仔細檢查MySql庫的文檔,但對於SqlCommand,CommandTimeout不是毫秒,而是秒。

+3

在MySQL中也是秒。也是 - 0沒有超時。 – 2012-07-16 20:03:08

3

如果您能向我們展示您的方法,我們可以幫助您找到錯誤。

如果歷史(和SO)教會了我什麼,它的

"You better be using Paramaterized SQL statements before posting any code" 

如果你是如何在這裏使用參數化命令不能確定就是一個例子(從那裏我沒有使用其中一個答案採取參數化SQL)

var command = new MySqlCommand(
    "SELECT * FROM tblPerson WHERE LastName = @Name AND Height > @Height AND BirthDate < @BirthDate", connection); 

command.Parameters.AddWithValue("@Name", lastname); 
command.Parameters.AddWithValue("@Height", height); 
command.Parameters.AddWithValue("@Name", birthDate); 

嘗試,如果你還沒有和發佈一些代碼:)

+0

感謝您的提示。 – 2012-07-16 18:57:13

1

您也可以嘗試在連接字符串中添加「default command timeout = 360」;例如

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;default command timeout=20; 

此選項可從Connector/NET版本5.1.4獲得。

[我解除了這個connectionstrings.com/mysql/