- - PR -
Page_Load時にうまくDatagridにデータが反映されない
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-15 01:12
初めて投稿させていただきます。よろしくお願いいたします。
現在ASP.NETにてWebアプリケーションを開発しております。 (.net framework 1.1 環境です) ある遷移元画面(A)にリンクが張られており、これをクリックすると 遷移先画面(B)が開くようになっています。 この(B)がロードされるときに(Page_Loadのところで) ある条件文によりDBに検索(対象はoracle9iです)しています。 検索にはDataAdapterとDataSetを使用しています。 DataSetに格納しこれをDatagridにbindしています。 このときに(B)へのリンクを押すと検索されたものがDatagridに 表示されるのですが、大体2回に1回の確率で、 ページのロードがされないことがあります。 現象としてはリンクを押しても、IEのマークが動いたままで ページが移動しません。そこでリンクをもう一度押すと (B)のページが表示され、Datagridも正しく表示されます。 またこれはリンクだけでなく、WebControlのボタンで遷移先の ページを開くようにしても発生します。 リンクやボタンの二度押しは避けたいので回避する方法をご存知の方が いらっしゃればご教授ください。 どうぞよろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-03-15 11:43
これだけの情報だと、可能性として
・ネットワーク上の問題があって、うまく次のページをよびだせてない ・処理上の問題があって、処理が終わってない というようなことが考えられます。 まずそこをきりわけてみたらどうでしょうか。 処理上の問題だとしたら、DBの検索を行わなければうまくいくのか、とか DB側でアクセス状況みて何がおきてるか調査する、といったことを やっていくようになるかと思います。 | ||||||||
|
投稿日時: 2006-03-15 12:32
お返事、ありがとうございます!
どのように切り分ければいいのかわかっていないかもしれませんが 検索したデータを表示させないでページをロードする画面に関しては 問題なく開きます。 またボタンを2度押せばデータが表示されるので ネットワーク上の問題はないのではないかと思っているのですが 認識間違いはあるでしょうか。
先ほども書きましたが、DBの検索を行わなければページは表示されます。 ちなみに開発環境が即Webサーバになっており、 ネットワークで接続しているのはDBサーバのみです。 以下は問題のコードですが またデバッグを細かくかけてみたところ -------------------------以下コード-------------------- 'OPEN If CType(Session("SESS_CON"), OleDb.OleDbConnection).State = ConnectionState.Closed Then CType(Session("SESS_CON"), OleDb.OleDbConnection).Open() End If search_comm.Connection = CType(Session("SESS_CON"), OleDb.OleDbConnection) search_comm.Parameters.Add(New System.Data.OleDb.OleDbParameter("SEIKYU_EMP_NO", System.Data.OleDb.OleDbType.VarChar, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Session("login_no"))) ' search_comm.Parameters.Add(New System.Data.OleDb.OleDbParameter("BUSHO_CD", System.Data.OleDb.OleDbType.VarChar, 0, System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Session("busho_no"))) ' DA_SINSEI_SEARCH.SelectCommand = search_comm DS_SINSEI_SEARCH21.Clear() DA_SINSEI_SEARCH.Fill(DS_SINSEI_SEARCH21)・・・・・・・・・・* DataGrid1.DataSource = DS_SINSEI_SEARCH21.Tables("table").DefaultView DataGrid1.DataBind() Session("repair") = "" --------------------------------------------------------- *をつけた部分で処理が止まってしまいます。 その他調査すべき点などありましたら教えてください。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-03-15 13:38
DB側でなんらかのエラーでてませんか?
コネクションをセッションを使ってもちまわっているので、DBとの接続が 一杯になってたりしないか気になります。 #OracleとOleDB使って接続してるときってどう動くんだっけな。。。 | ||||||||
|
投稿日時: 2006-03-15 19:22
回答、ありがとうございます。
すみません。実はOracleの管理をしたことがないので Enterprise Manager Consoleでセッションを見るぐらいしかできないのですが セッションが残ってしまい、いっぱいになることはありません。 また知り合いから、Oracleへの接続をその都度行うと 接続に時間がかかるため、Sessionで保持したほうがいいと 聞いて、そのようにプログラミングしたのですが 本来はその都度新しく接続を作成して、Open・closeをするべきなのでしょうか。 何も知らず、質問ばかりで申し訳ございません。 | ||||||||
|
投稿日時: 2006-03-15 19:41
OleDbConnection は接続プーリングを管理できるハズです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-03-15 20:21
ご回答ありがとうございます。
実は各画面でOleDbConnectionを毎回作成しているのですが その必要はないということなのでしょうか。 それとも各画面で作成したもので同じ設定 (たとえば、Provider=OraOLEDB.Oracle.1;Password=aaa;User ID=AA;Data Source=test1 と毎回書く) した場合は同じ接続とみなされ、接続が複数になることはないのでしょうか。 どこをどのように勉強すればいいかもわからない状態で 質問ばかりで申し訳ございません。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-03-16 10:44
> それとも各画面で作成したもので同じ設定
> した場合は同じ接続とみなされ、接続が複数になることはないのでしょうか。 接続プーリングというのは、一度接続に使ったものを完全に切ってしまわないで とっておいて、次に使いたいといわれたときにその休止状態の接続を使う、という 仕組みです。 接続は複数になるかもしれませんけど、いちいち接続しているわけではないので 十分な処理速度となることが考えられます。 問題はOracleとの接続のところででてると考えられるわけですから、そこで 何が起きてるかをきちんと調べてみるしかないですよね。 でないと、プログラムをいくら変更してみたところで根本的な対策には なりませんから。 この機会にしっかり勉強してみるぐらいのつもりで調べてみたらどうでしょうか。 |