いつも参考にさせていただいております。
.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]
> vb6では以下のようにレコードセットから
> フィールドの型やサイズなどを取得していました。
VB6 で定義を調べるのであれば、Connection.OpenSchema を使います。
(もしくは、ADOX を使うとか)
.NET でも同様です。ADO の Connection.OpenSchema に対応する
OleDbConnection.GetSchema / OdbcConnection.GetSchema メソッドが
用意されています。
魔界の仮面弁士様お返事ありがとうございます。
スキーマと聞きハッとしました。
今後参考になられる方にソースを掲載しておきます。
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の時)にテーブルやフィールドの一覧を取得したいときに
スキーマというものを教えてくださったのも魔界の仮面弁士様でした。
進歩していなくて‥申し訳ないです。
いつも本当に助けていただいてありがとうございます。