- PR -

データセットはsubルーチンが終わると消えるのですか?

1
投稿者投稿内容
elmo
常連さん
会議室デビュー日: 2002/08/09
投稿数: 47
投稿日時: 2002-10-17 14:32
いつも参考にさせてもらっています。elmoです。

教えていただきたいのですが、
datasetを作成(newして)し

オンロード時によびだされるSubルーチンで、
datasetにデータを放り込みます。

ボタンクリック時でオンロード時にセットしたdatasetを見に行こうとして
「オブジェクト参照がオブジェクトインスタンスに設定されていません」というエラーがでます。

・datasetはメモリ上に書き込んだだけで、xmlファイルには書き出していません。
(ウィザードは使っていないので)
・datasetは関数の外で(protected)で宣言しています。newしています。

datasetはメモリに書き出しただけの場合、手続き(関数)が終了するとなくなるものなのでしょうか?

それともプログラムがおかしくそのような状況になっているのでしょうか?
教えていただけると大変助かります。
DaikiRyuto
大ベテラン
会議室デビュー日: 2002/07/23
投稿数: 200
投稿日時: 2002-10-17 15:02
引用:

それともプログラムがおかしくそのような状況になっているのでしょうか?
教えていただけると大変助かります。



話が良く見えないので、コードを載せていただいた方が良いかも。
elmo
常連さん
会議室デビュー日: 2002/08/09
投稿数: 47
投稿日時: 2002-10-17 15:31
わかりにくい説明ですみません・・・。
あせってるせいで(泣)。

ソースは以下のとおりです。

============================================================
☆ソース☆
============================================================

Imports System.Data
Imports System.Data.OleDb

Public Class PCSB004_DATA

Inherits System.Web.UI.Page

'使用オブジェクト
Protected pcsConnection As New OleDbConnection()
Protected pcsCommand As New OleDbCommand()
Protected pcsAdapter As New OleDbDataAdapter()
Protected dstSelect As New DataSet()
Protected dtlSelect As DataTable
Protected pscConnstr As String
Protected pcsSql As String
Protected intGridCount As Integer
Protected intCount As Integer


'*******************************************************
' オンロードイベント
'*******************************************************
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If Not Page.IsPostBack Then

'===================================================
' 処理1) データ抽出
'===================================================
pscConnstr = ConfigurationSettings.AppSettings("dbconnstr")
pcsConnection.ConnectionString = pscConnstr
pcsSql = "SELECT LOGINCD, LOGINNAME FROM STAFFTABLE"

Try
pcsCommand.CommandText = pcsSql
pcsCommand.Connection = pcsConnection
pcsAdapter.SelectCommand = pcsCommand

pcsAdapter.FillSchema(dstSelect, SchemaType.Mapped)
pcsAdapter.Fill(dstSelect, "PcsDataTable")

Catch objError As Exception

'ERROR 処理

Finally
'nop
End Try

'===================================================
' 処理2) グリッドにデータバインド
'===================================================
dtlSelect = dstSelect.Tables("PcsDataTable")
dgdKikaku.DataSource = dtlSelect
dgdKikaku.DataBind()

END IF

End Sub

'*******************************************************
' ボタンクリックイベント
'*******************************************************
Private Sub cmdUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdUpdate.Click

Response.Write("テーブル行数" & dtlSelect.Rows.Count)

End Sub

End Class

============================================================
☆ソース☆
============================================================

簡単にいうとオンクリックイベントで、ページオンロード時につくったはずのDataSetがなかったのです。
ウィザードで作った場合、上の処理は問題なくできていたので、xmlに書き出さないと、
datasetは手続きが終わるとなくなるのかなと思ったのです。


elmo
常連さん
会議室デビュー日: 2002/08/09
投稿数: 47
投稿日時: 2002-10-17 17:19
elmoです。
すみません。解決しました。

見えなかったのは、ボタンクリック時に「データを抽出する」ロジックが、ポストバック時に処理しないというif文に入っていたために起こってしまいました。

まぁぁぁったく、DATASETやDATATABLEとは次元の違う話でした!
本当にすみません!
1

スキルアップ/キャリアアップ(JOB@IT)