DataSourceハマリポイント

覚書。体験談からなので、間違ってる可能性あり。鵜呑み注意。
一度、時間を作って一通り調べたいんだけどね~。

見つからない。

  • 検索パラメータにNULLが含まれている場合に発生。(SQL自体がNULLに対応しててもダメ)
  • DataSourceのCancelSelectOnNullParameterをFalseに変更する。
  • DataSourceのSelectingイベントでSQLとパラメータが期待しているものかどうか確認する。
  • 各パラメータを埋め込んでSQLCMDで正しいか確認する。

更新、削除されない。

  • PrimaryKeyが空文字の場合、初期設定だと、Empty→Nullに変換がかかってしまい処理されない事があった。
  • クエリビルダ→パラメータ→詳細設定でConvertEmptyStringToNullをFalseに変更する。
  • DataSourceのSelectingイベントでSQLとパラメータが期待しているものかどうか確認する。
  • 各パラメータを埋め込んでSQLCMDで正しいか確認する。

表示が更新されない。

  • DataSource#DataBind()を呼び出しても、対象は更新されない。
  • 各ControlのDataBind()を呼び出しましょう。

クエリービルダーで変なSQLに変換されてる。

  • 左辺と右辺を交換する事により上手くいくケースがある。
  • Or条件の書き方を工夫すると上手くいくケースがある。
  • どうにもならないときはCLRを使ってシンプルなクエリーにする。
    標準SQLでないことによりパフォーマンスやキャッシュに対して劣化する可能性はあるけど、保守性の向上にはなります。

Insert, Update, Deleteを書くのが面倒

  • 複雑なSelect文を書く前にクエリビルダーでテーブル選択、全カラム表示にし、詳細設定でInsert, Update, Deleteを自動生成するにチェック。
  • これで自動生成される。その後、Select文を書き直せばOK

ちゃんと設定してるはずなのに、反映されない。

  • DataSource.XXXParameters(xxx).DefaultValueで指定してるのに設定してないことになる。
  • DataSource#XXXingイベントの場合は、e.Command.Parametersで変更しましょう。
    • この時指定するパラメータ名はxxxではなく、@xxx形式。
  • GridView.Xxxingの場合は、DataSourceのParameterを変更で良い。

      コメントをどうぞ