VB.NET(2005) で初めてデータセットを利用しようとしていますが、モジュールからデータテーブルの値を取得できません。


DataSet1 に Table1 を追加し、実際にいくつかデータを入力した状態で、以下は問題なく参照できます。
Dim Table1 As DataTable = Form1.DataSet1.Tables("Table1")

以下は正しい値を取得できません。(0 になってしまいます。)
Dim Table1Count As Integer = Form1.DataSet1.Tables("Table1").Rows.Count

何か注意すべき点があるのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2007/08/05 01:12:06
  • 終了:2007/08/06 18:08:17

回答(2件)

id:KUROX No.1

KUROX回答回数3542ベストアンサー獲得回数1402007/08/05 08:53:34

ポイント35pt

DataSet1って、データコントロールですか?

気になったのは、変数の宣言と初期化を同時にしてるこ

とです。タイミングが悪いのではと。オブジェクトは存在

しても、まだデータを読み込んでない状態なので、0件を

返すのでは。

分かりませんが。

http://dobon.net/vb/

のサンプルが役に立つかもしれません。

------------------------------------------------

http://www.atmarkit.co.jp/fdotnet/basics/adonet04/adonet04_04.ht...

の dataset.cs はきちんとRows.Countを取れている。

(1)処理的に何か違いがあるかどうか調べてみる

(2)dataset.csと同じことしてRows.Countがきちんととれるか

でまず原因の切り分けをしてみてはどうでしょうか?

方式が変えれるならかえる。

--------------------------------------------

DAOだった時代は、Rows.Countは、レコード移動で最終行

まで移動しないと、正しい値が取れませんでした。

データは読む必要は、ないんですが、レコードのカレント位置を

最後にしてからRows.Countを読むという感じです。

以上、参考になれば幸いです。

もう少し調べてみますが(^^;

id:isq

ご回答ありがとうございます。

DataSet1 は System.Data.DataSet コントロールです。

変数の初期化タイミングを変更したり、レコード移動をさせてから読み取ることを試行しましたが、同じ結果でした。

DataSet コントロールを配置しているフォームのクラス内に Rows.Count 読み取りのプロシージャを書くことで、とりあえず値は取得できました。

別モジュールに書いた時に問題が再現する為、スコープの問題なのかとも考えたのですが、DataSet 自体への参照はエラーなく通っており、ウォッチ式で確認すると Rows.Count は 0 になってしまっています。

2007/08/05 16:42:19
id:aside No.2

aside回答回数339ベストアンサー獲得回数312007/08/06 13:30:27

ポイント35pt

当方環境で以下のソースコードを用い試したところ

2件カウントがとれました、参考になれば幸い

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ds.Tables.Add("Table1")
        Dim dt As DataTable = ds.Tables("Table1")
        dt.Columns.Add("test1")
        dt.Columns.Add("test2")
        Dim dr As DataRow = dt.NewRow
        dr.Item(0) = "aaa"
        dr.Item(1) = "aaa"
        dt.Rows.Add(dr)
        dr = dt.NewRow
        dr.Item(0) = "bbb"
        dr.Item(1) = "bbb"
        dt.Rows.Add(dr)
        Dim Table1Count As Integer = ds.Tables("Table1").Rows.Count
    End Sub
End Class
id:isq

ご回答ありがとうございます。

参考にさせていただきます。

2007/08/06 18:05:15

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません