11

データベースのサイズが大きくなるにつれて、実行に時間がかかるクエリがあります。クエリは最適化されて必要ですが、最近、C#コンソールアプリケーションで次のエラーが発生しました。

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

接続文字列の接続タイムアウトを増やしても効果はありません。から増やしました

接続タイムアウト=28800

接続タイムアウト=128800

しかし、この変更にもかかわらず、まだエラーが発生しています。

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

「クエリにかかる時間」以外に、この例外を生成する可能性のあるものはありますか?

4

3 に答える 3

22

私は以前にこの問題を抱えていました。ConnectTimeoutプロパティは、データベースへの接続時に発生するタイムアウトにのみ適用され、クエリには適用されません。

ただし、 CommandTimeoutは、クエリが返されるまで待機する時間を指定します。デフォルトは30秒だと思います。MySqlライブラリのドキュメントを再確認してください。ただし、SqlCommandの場合、CommandTimeoutはミリ秒ではなく秒単位です。

于 2012-07-16T19:39:45.283 に答える
3

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

歴史(そしてSO)が私に何かを教えてくれたなら、その

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

パラメータ化されたコマンドの使用方法がわからない場合は、例を示します(パラメータ化されたSQLを使用しなかった回答の1つから抜粋)。

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);

まだ行っていない場合は試してみて、コードを投稿してください:)

于 2012-07-16T18:13:31.143 に答える
3

接続文字列に「defaultcommandtimeout=360」を追加することもできます。例えば

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

このオプションは、Connector/NETバージョン5.1.4から利用できます。

[これをconnectionstrings.com/mysql/から削除しました

于 2014-09-02T23:11:44.583 に答える