2010年10月07日

「プレフィックスの最大数を超えています...」エラーの顛末

ASP.NET3.5でListViewを使ったWebアプリでデータの更新(UpdateCommand)を実行しようとしたときエラー「数値 名'System.Web.UI.WebControls' プレフィックスの最大数を超えています。最大数は 3 です。」が発生した。

デバッグポイントを追ってみたらListViewのEditItemTemplateのコントロールからデータを取得している最中に起こっているらしいことが判った。「プレフィックスの最大数」でググッてみるとほとんどがデータベース(SQLServer)に関する問題なので、それ以前に発生しているのが変だなと思っていたところ何度もデバッグするうちにエラーの発生する箇所が特定できないことが判った。
ステップオーバーで一行ずつ確認してみると早くエラーすることもあれば最後まで取得可能な場合もある。当初はコントロールからの取得に問題があると考え、しかも「System.Web.UI.WebControls」と表示されているのでコントロールに問題があるとばかり考えていろいろ修正してみたのだが、一向にエラーがなくならない。同僚にも確認してもらデバッグの状態を調べているうちに、とんでもない間違いを見つけた。全てはそれが原因だった。

コントロールから変数を取得する際、TextBox1.Textとすべきところを、TextBox1.ToStringとしていたのだ。その結果、'System.Web.UI.WebControls.TextBox'という文字列がSQL文に含まれ、これを解釈した結果が「プレフィックスの最大数を超えています」になったのである。ここにはドット(.)が4つ、つまりプレフィックスが4つになっていたのだ。VisualStudioのコード入力支援で自動メンバ表示で誤って選択してしまった結果である。
またデバッグ箇所が特定できなかったのも解決に時間が掛かった原因でもある。ステップさせても突然先に進んでエラー箇所に行く前にエラーメッセージが出てしまうことがこれまでにも何度かあった。

また、このテストの過程で再確認したことがある。
それはTextBoxから変更された値を取得しようとしても ReadOnlyプロパティがTrueになっていると変更値が取得できないということだ。


posted by なっちゃん at 09:04| 静岡 ☔| Comment(0) | TrackBack(0) | ASP.NET Tips | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。