- - PR -
Global.asaxで作成したDataViewを使いたい
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-14 12:49
いつもお世話になっております。
Global.asaxのApplication_BeginRequest内で、 Oracle9i上のテーブルよりデータを取得し、 DataViewにセットしたものを、あるWebページ内の dropdownlistのDataSourceにセットした結果、 レコード一覧が表示されません。 1.Global.asax ↓ cn.Open() cm = New OracleCommand With cm .CommandTimeout = 60 .Connection = cn .CommandText = strSql .CommandType = CommandType.Text End With da = New OracleDataAdapter(cm) ds = New DataSet intCnt = da.Fill(ds) da.Dispose() dt.Columns.Add(New DataColumn("CD", GetType(String))) dt.Columns.Add(New DataColumn("NM", GetType(String))) For i = 0 To (intCnt - 1) dr = dt.NewRow() dr(0) = ds.Tables(0).Rows(intIndex).Item(0) dr(1) = ds.Tables(0).Rows(intIndex).Item(1) dt.Rows.Add(dr) Next i Dim dvCD As New DataView(dt) Application("dvCD") = dvCD ↑ 2.WebPage.aspx ↓ With ddl_CD .DataSource = Application("dvCD") .DataTextField = "NM" .DataValueField = "CD" .DataBind() .Items.Insert(0, New ListItem("選択無し")) End With ↑ どなかたご存知の方がいらっしゃれば、ご教示お願い申し上げます。 |
|
投稿日時: 2005-03-14 13:28
こんにちは。
たぶん原因は、元となるDataTableオブジェクトが破棄されてしまっているからでしょう。 DataView自身にはデータのコピーは格納されていません。DataViewは、対応するDataTableから値を返します。ですから、元となるデータが破棄されているとデータを返すことができません。 やったこと無いけど、DataTableのインスタンスも一緒にApplication変数に入れたら可能なのかな?試してみてください。 #いや、そもそもなしてApplication変数。リクエスト毎に、このロジックが走るとして複数ユーザーがアクセスしたとき、大丈夫なのかな。。。? [ メッセージ編集済み 編集者: nodera 編集日時 2005-03-14 13:33 ] |
|
投稿日時: 2005-03-14 18:38
キャッシュ使いましょう、キャッシュ。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconaspcachingfeatures.asp 「いろいろなページ、または複数のページアクセスで使用するテーブル情報を共有したい」って言うことでしょ? キャッシュがあるか調べ、なければデータベースから読み取ってキャッシュにしまう。キャッシュがあればそこから読み取る。 http://quick-tips.hp.infoseek.co.jp/asp.net/tip.html 「値の永続化」参照。 _________________ |
|
投稿日時: 2005-03-15 14:07
noderaさん、Jittaさん、ご回答有り難うございました。
すみません、「Application_BeginRequest」でではなくて、 「Application_Start」側での事でした。 現状では、Public SharedでDataView型のワークを設け、 そこに値をセットしてという方法で取り敢えず動かしております。 Jittaさんのご指摘にありましたように、キャッシュも少しやって みたのですが、私の根本的な理解力ミスのせいでしょうか、 これはアプリケーションのルートに一つ配置するGlobal.asaxでは 無効なのでしょうか? 感じとしまして、朝の業務開始時点で任意のアプリケーションを ユーザーが開始させた際、その時点でキャッシュできればいいのですが…。 説明不足で申し訳ありません、よろしくお願い致します。 |
1