VB DataTableのカラム名を配列に格納したいのですがなかなか上手くいかず困っています。 ------------- ・dtTable ID , 担当者 , 商品コード , 金額
VB DataTableのカラム名を配列に格納したいのですがなかなか上手くいかず困っています。 ------------- ・dtTable ID , 担当者 , 商品コード , 金額 ------------- のようなデータテーブルがあり、カラム名を下記のように格納したいです。 配列(1)→ID 配列(2)→担当者 配列(3)→商品コード 配列(4)→金額 下記のようにコーディングしたのですが、★の箇所で 「オブジェクト参照がオブジェクト インスタンスに設定されていません。」 のエラーが発生してしまいます。 どこを直していいのか分からず、お力添えいただきたいです。 ------------------ Public Sub GetColumn(ByVal dtBefore As DataTable) ’データテーブルを取得 'dtTableより1行読み込み(ヘッダー行) Dim record As String() = Nothing Dim i As Integer = 1 For Each col As DataColumn In dtTable.Columns record(i) = col.ColumnName.ToString ★ i += 1 Next End Sub ------------------
テーブル名が間違っていました。 冒頭のdtBeforeはdtTableのことです。 なので持ってきたテーブルのカラム名を取得しようとして失敗している感じです。
Visual Basic | プログラミング・49閲覧
ベストアンサー
こんばんは! >Dim record As String() = Nothing ここでオブジェクトを破棄しているものに対して値を設定しようとしているからではないでしょうか。 あと、For Eachの中でdtTableという変数を使用していますが、この変数はどこかで宣言されてますか? それからこのメソッドの引数でdtBefore というDataTable型の引数が指定されていますが、このDataTableの列名を取得するではないのですか? なので以下のようにします Dim record(dtBefore.Columns.Count - 1) As String Dim i As Integer = 0 For Each col As DataColumn In dtBefore.Columns これでもエラーが起こる可能性があります。 引数のdtBeforeがNothingではない保証がないからです。 なので通常は冒頭に If IsNothing(dtBefore) Then Return 等と記述してエラーにならないようにします
質問者からのお礼コメント
ありがとうございますできました! 最初の宣言の時に配列の数を指定していなかったからエラーが出ていたようです。 本当に参考になりました。ありがとうございました。
お礼日時:7/1 17:21