2009年12月23日水曜日

Fatal error encountered during command execution.

http://blogs.yahoo.co.jp/hilapon/3270487.html


Fatal error encountered during command execution.

というメッセージを吐く場合があります。クエリにパラメータを設け MySqlParameter クラスでパラメータを設定しない場合、この例外が発生します。例えば
Dim query AS String = "SELECT * FROM customer WHERE id = @id"
Dim command As New MySqlCommand(query, con)
command.ExecuteNonQuery()
このクエリの場合、パラメータ id には値が割り当てられてないため、MySqlCommand クラスはこの例外を発生します。以下のようにパラメーターを設定すれば、例外は発生しません。 (´∀`)
Dim query AS String = "SELECT * FROM customer WHERE id = @id"
Dim command As New MySqlCommand(query, con)
command.Parameters.Add(New MySqlParameter("id", 10))
command.ExecuteNonQuery()
また気をつけなければいけないのは、以下のケース。

select @data := 3, @data * 4

この場合、クエリ内でパラメータに値を設定してるから phpMyAdmin や Navicat では正常に実行されます。
しかし MySQL Connector/NET では
Dim query AS String = "select @data := 3, @data * 4"
Dim command As New MySqlCommand(query, con)
command.ExecuteNonQuery()
Fatal error encountered during command execution.

・・・例外が発生します。(-ω-)

MySQL Connector/NET の仕様ということで注意が必要です。
ちなみに SQLClient の場合は・・・・・・・・・忘れた!(^ω^)


あと、どのパラメータが設定されてないのか調べるには、例外をウオッチして InnerException プロパティを見れば判ります。このケースでは ?id というパラメータが設定されてないのが判ります。(-ω-)

イメージ 1




0 件のコメント:

コメントを投稿