2012-07-16 16 views
6

データベースのサイズが大きくなるにつれて実行に時間がかかります。クエリを最適化し、必要な、私のC#コンソールアプリケーションは、最近、私は、このエラーを与えているされていますMySqlException:タイムアウトがタイムアウトしました - 接続タイムアウトを増やしても効果がありません

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

は助けにならない接続文字列で接続時間を増やします。私は

Connect Timeout=128800

Connect Timeout=28800

から、それを増加させたが、私はまだ、この変更にもかかわらず、エラーを取得しています。

MySQL Workbenchからクエリを実行すると約10秒しかかからないため、この未処理例外を防ぐ方法がわかりません。

「クエリにかかる時間」の他に、この例外が発生する可能性がありますか?

+3

コードから表示できますか? –

+8

ConnectionTimeoutではなくCommandTimeoutを変更します。 –

+0

未処理の例外:System.ArgumentException:キーワードがサポートされていません。 パラメータ名:connecttimeout at Application.MainClass.Main(String [] args) ああ、私はあなたをもっと慎重に読む必要があります、 "CommandTimeout"。 –

答えて

16

を場合、私は前にこの問題を持っていたことを試してみてください。 ConnectTimeoutプロパティは、クエリではなく、データベースに接続するときに発生するタイムアウトにのみ適用されます。

CommandTimeoutただし、クエリが返されるのを待つ時間を指定します。私はデフォルトが30秒だと思う。 MySqlライブラリのドキュメントをダブルチェックしますが、SqlCommandの場合、CommandTimeoutはミリ秒単位ではなく秒単位です。

+3

MySQLではまた、0もタイムアウトもありません。 –

3

私たちにあなたの方法を示すことができれば、私たちはそのバグを見つけるのを助けることができます。

あなたがここにパラメータ化コマンドを使用する方法について不明な点がある場合は歴史が(およびSO)私には何も、その

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

を教えている場合は、(私が使用していなかった答えの1から取った例でありますパラメータ化された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

このヒントをありがとう –

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/

関連する問題