- PR -

VB→VB.NET移行 データグリッドとADODB.Recordsetの連結

1
投稿者投稿内容
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-01-14 15:20

 いつもお世話になります。
 マイクロソフトの↓サイトでDataGridコントロール
 の.NET化についての記述があります。
 http://www.microsoft.com/japan/msdn/vbasic/migration/tips/ado.aspx
 アップグレードウィザードを使えば変更なく移行できるとの
 ことですが、結局.NETのDataGridを使うにはADO.NETでデータを
 取り込むしかないみたいです。とほほ 笑顔
 
 現在.NET移行をチームで行っておりますが、ADO.NETを使わずに
 DataGridを使う方針でいたため痛いですねー。これは。

 そこで、.NETのDataGridにADODB.Recordsetを取り入れる
 方法などありますでしょうか?
 そういう技をご存知の方、お願いします。
 また、ADO.NETを使う以外にないという有識者のご意見が
 ありましたらこちらもお願いしたく。

 チーム全員.NET初心者なもので方針決めするのにも
 一苦労です。よろしくお願いします。

サイトの内容です。アップグレードウィザードで移行されたコード↓
=========================================================================
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load

Cn = New ADODB.Connection
Cn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source="
& VB6.GetPath & "\Test.mdb;"
Cn.Open()
Rs = Cn.Execute("SELECT * FROM TestTable", , ADODB.CommandTypeEnum.adCmdText)
Me.DataGrid1.DataSource = Rs
End Sub
========================================================================= 
ちなみに.NETのDataGrid1だとこのの部分でエラーになりました。
DataGrid1.DataSource = Rs
やっぱり.NETのDataGrid1を使うにはこのようにDataSetを使うしかないのでしょうか。
Private dts As DataSet
DataGrid1.SetDataBinding(dts, "TestTable")
 
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 15:26
自信を持って言いますが、ADO.NET テクノロジを使った方が工数的にも保守的にも絶対に良いです。
どうせ再テストは必要でしょう。

ADODB は COM オブジェクトです。
扱う場合は、参照をしっかりと解放する必要があります。

  COM オブジェクトを解放する

こんな実装をしたいですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-01-14 15:58

 ”じゃんぬねっと”さんありがとうございます。 
 ちなみにHPもよく拝見しております。
 
 なるほどです。COM オブジェクトの解放はめんどうですね。
 しかしもともとの作りがADODBに特化した実装に
 なっていて、ADO.NETにすると構造から変えなくては
 いけなくなりそうなんです。(ざっと見た感じですが)

 DataGrid1.DataSource = Rs

 以外はうまくいっているのでなんとが構造変えだけは
 避けたいんです。 
 



 
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2006-01-14 16:04
 ま、Recordsetの内容をSystem.Data.DataSetに格納する。
で、そのDataSetをDataGrid.DataSourceへ、かな。
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-01-14 16:26

 lalupin4さん、ありがとうございます。
 そういう処理ができるならうれしいです。
 
 さっそく検討いたします。

 
chibana
常連さん
会議室デビュー日: 2005/11/25
投稿数: 32
投稿日時: 2006-01-14 19:35
 おつかれさまです。.NET Framework クラス ライブラリを
 検索したところ下のような関数を見つけました。
 
Overloads Public Function Fill( _
ByVal dataTable As DataTable, _
ByVal ADODBRecordSet As Object _
) As Integer

Overloads Public Function Fill( _
ByVal dataSet As DataSet, _
ByVal ADODBRecordSet As Object, _
ByVal srcTable As String _
) As Integer

 どちらかで、Datasetもしくはdatatableに
 変換すればDataGridのデータソースに
 格納できるかもです。

 じゃんぬねっと様、lalupin4様、もし推奨する
 実装方法があればご教授ください。
 




じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-14 20:13
引用:

chibanaさんの書き込み (2006-01-14 19:35) より:

どちらかで、Datasetもしくはdatatableに
変換すればDataGridのデータソースに格納できるかもです。


変換する必要はないのではないでしょうか。
双方のオーバーロードは、充填済みの DataSet、DataTable を取得できますよね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

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