ユーザ用ツール

サイト用ツール


it技術:dotnet:datatableおよびdataviewの注意点

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

it技術:dotnet:datatableおよびdataviewの注意点 [2017/03/26 11:37] – 作成 yajuadminit技術:dotnet:datatableおよびdataviewの注意点 [2017/03/26 11:38] (現在) yajuadmin
行 1: 行 1:
 ====== DataTableおよびDataViewの注意点 ====== ====== DataTableおよびDataViewの注意点 ======
 +===== 1.DataViewのSortメソッドやDataTableのSelectメソッドがOracleのOrder By の結果と異なる =====
 +Oracleの標準ソートは、Nullが最大値として扱われるため、SQLで取得したデータを表示した場合と、DataView のSortメソッドや
 + DataTable の Selectメソッドでソートした結果を表示した場合とでは、ソートキーに NULL項目があった場合で結果が異なる。\\
  
 +ソートキーにNULL項目が含まれる場は、NULLを最大値に変換したのをソートキーとするなどの考慮が必要である。
 +
 +参照:[[http://blog.livedoor.jp/tsu129/archives/50197967.html|NULLを絶対最後にしたい場合]]
 +
 +===== 2.DefaultViewプロパティで取得できる DataView は常に同じインスタンスである ======
 +<code vbnet>
 +Dim dvView As DataView
 +dvView = dtTable.DefaultView
 +</code>
 +
 +DataTable の「DefaultView」プロパティで取得できる DataView は常に同じインスタンスを使用している。\\
 +例として、dvView.RowFilter を指定して抽出し、別の箇所で全て抽出するため dvView.RowFilter を指定しなかった場合、以前の
 + RowFilter が残ったままとなっているため、全件取得できない。\\
 +
 +全件取得するなら、この例の場合 RowFilter を再設定する必要がある。\\
 +本来は、同じ DataTable から異なる DataView を生成する場合は、下記の方法を用いた方がいいようです。
 +<code vbnet>
 +Dim dvView As DataView = new DataView()
 +dvView.Table = dtTable
 +</code>
 +
 +参照:[[http://blogs.wankuma.com/shannon/archive/2007/01/24/58385.aspx|DataTable.DefaultViewは使うな。]]
 +
 +===== 3.追加してすぐに削除すると削除マークとはならずに本当に削除されてしまう ======
 +DataTable型のデータを渡す先の処理で RowState.Deleted を見て判断しているので、削除データを作るべく追加した上で削除してみたが、 RowState.Deleted にならないため調査してみたところ AcceptChanges() する必要があった。
 +
 +<code vbnet>
 +'削除行を追加
 +dtResult.Merge(LdtDeleteMeisai)
 +
 +'DataRow の RowState が Added である場合、つまり行がテーブルに追加された直後の状態の場合に、
 +'その行を Deleted としてマークしたときは、その行がテーブルから削除されます。
 +'↓を実行することにより、Added→Unchangedとなる
 +dtResult.AcceptChanges()
 +
 +'追加したのを削除することにより、RowState.Deletedとさせる
 +dvView = dtResult.DefaultView
 +dvView.RowFilter = "JUCHU_KEY = 'DEL'"
 +For i As Integer = 0 To dvView.Count - 1
 +    dvView.Delete(0)
 +Next
 +</code>
it技術/dotnet/datatableおよびdataviewの注意点.1490495837.txt.gz · 最終更新: 2017/03/26 11:37 by yajuadmin