覚書。体験談からなので、間違ってる可能性あり。鵜呑み注意。 一度、時間を作ってひととおり調べたいんだけどね~。
見つからない
- 検索パラメーターに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を変更で良い。
