フィールドのサイズを取得するには?

解決


唯香  2008-07-17 12:04:56  No: 140096  IP: 192.*.*.*

いつも参考にさせていただいております。

.Net初心者です。
vb6のプログラムを現在vb2008に修正しております。

vb6では以下のようにレコードセットから
フィールドの型やサイズなどを取得していました。
For i = 0 To RsTBL.Fields.Count -1
    Select Case RsTBL(i).Type
        Case adChar
            '処理
        Case adVarChar
            '処理
              :
    End Select
Next i

.NetではOdbcDataReaderを使用して同じようなことをしようとしています。
フィールドの型をストリング型で取得することができましたが
文字のサイズ(DefinedSize)や数字のサイズ(Precision/NumericScale)は
どのようにして判断したらよろしいでしょうか?

Dim odr As Odbc.OdbcDataReader
'〜odrにデータを取得〜
odr.Read()
For i As Integer = 0 To odr.FieldCount - 1
    MsgBox(odr(i).GetType.Name)
Next

あとodr(i).GetType.Nameとすればストリング型で取れますが
Odbc.OdbcType.Charなどで判断する方がいいように思うのですが
どのように比較対象を同じ型に合わせて判断するのでしょうか?

長々とお読みいただきありがとうございます。
何かご教授いただけると幸いです。

[XP Pro(sp3)/VB2008/Pervasive]

編集 削除
魔界の仮面弁士  2008-07-17 12:30:53  No: 140097  IP: 192.*.*.*

> vb6では以下のようにレコードセットから
> フィールドの型やサイズなどを取得していました。

VB6 で定義を調べるのであれば、Connection.OpenSchema を使います。
(もしくは、ADOX を使うとか)


.NET でも同様です。ADO の Connection.OpenSchema に対応する
OleDbConnection.GetSchema / OdbcConnection.GetSchema メソッドが
用意されています。

編集 削除
唯香  2008-07-17 14:15:07  No: 140098  IP: 192.*.*.*

魔界の仮面弁士様お返事ありがとうございます。
スキーマと聞きハッとしました。

今後参考になられる方にソースを掲載しておきます。
Dim dTbl As DataTable = CnDB.GetSchema("Tables")
For Each dRow As DataRow In dTbl.Rows
    For Each col As DataColumn In dTbl.Columns
        '処理
    Next
Next

他のデータベースだとわかりませんが
PervasiveだとDataReaderでこんな感じでもとれます。
"SELECT * FROM "X$Field" where Xe$File =(SELECT Xf$Id FROM X$File Where Xf$Name = '≪テーブル名≫')"

普段スキーマを使うことがないので今週ずっとコレで悩んでました。
ずいぶん前(vb6の時)にテーブルやフィールドの一覧を取得したいときに
スキーマというものを教えてくださったのも魔界の仮面弁士様でした。
進歩していなくて‥申し訳ないです。
いつも本当に助けていただいてありがとうございます。

編集 削除