ASP.net 開発時にデバッグ実行中のサーバーエラー


Operation is not valid due to the current state of the object.


対処法は


web.config の appSettings セクション内に次の設定を追加

<!-- Post Backで処理可能な最大フィールド数(Defaultは1000) -->
<add key="aspnet:MaxHttpCollectionKeys" value="5000"/>


設定する値が大きくなるほどPostBackで処理出来るフィールド数に余裕が出来ってことで。


2012年末くらいに適用されたセキュリティパッチが原因とのこと。



そういえば、産休にその頃入ったから、今更気づいたのかも・・


今回改修中のプログラムはgridviewで最大45列可変の列を持ったうえに、セルの中にはドロップダウンリストが配置されてるので、思いっきりこれに引っかかってたっぽいです。


以前、SQLServerで開発してたこともあって、Oracleで結合のSQL文を書くときも「LEFT JOIN」なんかをよく使います。


ずいぶん前に作成した帳票がこんな感じのものだったんですが




顧客ごとのA部門の売り上げとB部門の売り上げの一覧


         A部門売上     B部門売上

1顧客      100 

2顧客                   550

3顧客      250          450

4顧客      120



A部門、B部門どちらか最低でも売り上げがあれば出力



これを出力するためのSQLが


SELECT *

FROM

(A部門売上の副問合せ) A

FULL OUTER JOIN

(B部門売上の副問合せ) B

ON A.顧客ID=B.顧客ID



これでうまくいってたのですが、さらに前年売り上げの列も追加して欲しいとの要望が



すでに作成した外部完全結合のテーブルに対して前年売り上げを結合すればいいものと思い


SELECT *

FROM

   (SELECT *

   FROM

     (A部門売上の副問合せ) A

   FULL OUTER JOIN

     (B部門売上の副問合せ) B

   ON A.顧客ID=B.顧客ID)AB

LEFT JOIN

(前年売上の副問合せ) U

ON AB.顧客ID=U.顧客ID



としたんですが、結果はABの結合したテーブルに対してではく、Aに対して左外部結合された状態



本来ならば



         A部門売上     B部門売上   前年売上


1顧客      100                   150

2顧客                   550      700

3顧客      250          450      300

4顧客      120                   150


とならないといけないのが


         A部門売上     B部門売上   前年売上


1顧客      100                   150

2顧客                   550       ←前年売上がない汗

3顧客      250          450      300

4顧客      120                   150


A部門の値がない行に対しては結合されませんでした。



多分、oracleの仕様のようなので書き方を変えて対応したのが以下になります


SELECT *

FROM

(売上のある顧客IDの副問合せ)X、

  (A部門売上の副問合せ) A、

  (B部門売上の副問合せ) B、

  (前年売上の副問合せ) U

WHER

X.顧客ID=A.顧客ID(+)

AND X.顧客ID=B.顧客ID(+)

AND X.顧客ID=U.顧客ID(+)



オラクルマスター教科書Bronze(Oracle Database/DBA 10g)
¥3,990
楽天


オラクルマスタ-教科書Gold(Oracle Database)
¥4,725
楽天


門外不出のOracle現場ワザ
¥2,730
楽天


絵で見てわかるOracleの仕組み
¥2,310
楽天







去年あたりからVS2010の開発をちょこちょこさせてもらってます。


スマホ対応やらなんやらもやったんですが、最近の流行はjqueryでしょうか。



javascriptに詳しくない私でも簡単に組み込むことができるので、ちょっと重宝してます。


ほんとはこれを機会にjavascriptも勉強しないといけないんですけどね。



先日はdatepickerを組み込んだのでその覚書


<script type="text/javascript">

   <!-- jQuery UI用のスタイルシートを参照 -->

   <link href="../../scripts/css/jquery-ui-1.8.15.custom.css"

                rel="stylesheet" type="text/css" />

   <!-- jQueryライブラリを参照 -->

   <script src="../../scripts/jquery-1.6.4.min.js"

              type="text/javascript"></script>

   <!-- jQuery UIライブラリを参照 -->

   <script src="../../scripts/jquery-ui-1.8.15.custom.min.js"

              type="text/javascript"></script>

   <script type="text/javascript">

          $(function () {

              //カレンダーの表示

            $("#<%= txtDate.ClientID %>").datepicker();  

         });

</script>


※「<>」は「<>」(全角カッコ)に変換してます。



肝はfunction部分。



通常のサイトなどでサンプルコードを見ると



$("#<%=オブジェクト名称 %>").datepicker();


となっています。



VS2010の場合はオブジェクトIDの後ろに「.ClientID」が必要です。





VS2010で作るWeb-DBアプリ入門
¥2,520
楽天