理由はそのうち考える

まずやってみよう

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便利ですね。

stackoverflow.com