SQLServer動作確認中の備忘録
とあるアプリケーションの動作確認中に確認したエラーとその対処法の備忘録です。 SQLServerは経験がなかったので勝手がわからずなかなか苦労しました。
その1:SqlDataReaderのClose漏れでInvalidOperationException
以下のようなエラーが発生しているときは、SqlDataReaderをCloseせずにクエリを実行している可能性が高いです。処理を見直してClose漏れが無いか確認すると解決するかもしれません。
'System.InvalidOperationException: There is already an open DataReader associated with this Command which must be closed first.'
自分のケースではSqlCommand.ExecuteReader()とSqlTransaction.Commit()とが競合していました。そのためExecuteReader()を実行した後にSqlDataReader.Close()することによって例外を解消することができました。なおこのケースではExecuteReader()の返り値を受け取っていなかったのですが、こういう場合はExecuteReader()ではなくExecuteNonQuery()を使ったほうが良さそうだ、ということもわかりました。
その2:DataSetのFillでConstraintException
以下のようなエラーが発生しているときは、該当するDataSetクラスにある項目のAllowDBNullプロパティを確認すると解決するかもしれません。
'System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.'
自分のケースでは、該当するカラムがNULLになる可能性があるにも関わらずFill()を実行したことによって発生していました。そのため当該項目のAllowDBNullプロパティをtrueに設定することでエラーを解消することができました。
なお原因調査中にStack Overflowで以下のコードを見つけ、アレンジして実行し何が問題なのかを調査しました。Stack Overflow便利ですね。