お世話になります。
現在、VB.NETで作成中の画面にて
ストアドプロシージャから取得したADODB.Recordset型のデータを
DataTable型に変換しようとしています。
そこで、OleDbDataAdapter.Fill メソッド (DataTable, Object) を使用しようと考えています。
変換部分のロジックは↓のようなイメージです。
VB.NET
1 Public Function ConvRsToDt(ByVal rsIn As ADODB.Recordset) As DataTable 2 3 ' 変換用の変数を宣言する 4 Dim Adp As OleDbDataAdapter = New OleDbDataAdapter 5 Dim dtConv As DataTable = New DataTable 6 7 ' レコードセットのデータをデータテーブルに格納する 8 Adp.Fill(dtConv, rsIn) 9 10 Return dtConv 11 12 End Function
★背景、前提等
今回の画面はDBからデータ検索後、帳票出力が可能な画面です。
検索→印刷というオペレーションを行う場合、検索時/印刷時 で計2回上記の変換部品を呼び出しており、
DataTableをGrapeCity.spread.DataSource、GrapeCity.ActiveReport.DataSouce
にそれぞれ連携しています。
検索を行わず印刷を行うことはできず、印刷時には検索ボタン押下時に取得したRecordSetを
そのまま使いまわしています。
★発生している問題
検索時(1回目のConvRsToDt呼び出し)では、ConvRsToDtの戻り値であるDataTableに値が入っている。
印刷時(2回目のConvRsToDt呼び出し)では、ConvRsToDtの戻り値であるDataTableに値が入っていない。
★試したこと・調べたこと
・検索時、印刷時 それぞれの ConvRsToDtの呼び出し直前で 引数となるRecordsetには値が入っていることを確認。(ほかの処理で初期化等されていないことを確認)
・印刷時、検索時に取得したRecordSetを使いまわさず、再度検索処理を行い、Recordsetを取得しなおした場合、ConvRsToDtの戻り値(DataTable)に値が入ることを確認。
・印刷時(2回目のConvRsToDt呼び出し)では、DataTableにデータはできていないが、カラム情報は作成されていることを確認。
★質問内容
OleDbDataAdapter.Fillを使用した際の上記動作は、OleDbDataAdapter.Fillの仕様なのでしょうか?
使用方法が間違っているのでしょうか。
ご存知の方いらっしゃいましたらご教示お願いします。
(質問内容長くなり申し訳ありません。 わかりにくい部分、不足情報ありましたらご指摘いただけたら可能な範囲で追記させていただきますのでよろしくお願いいたします。)
DB:SQL Server 2008 R2
言語:VB.NET(.Net Framework 3.5)
IDE:Visual Studio 2015
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/05 09:38