■No14274 (ふるふる さん) に返信
> この場合、OleDbDataAdapter1を使わなくても、
> rs.Fiter = "条件"
> rs.Fields("サーバ名").Value
> でとってくればいいですね。
いいえ。それは止めておくべきでしょう。
絞り込みが必要なら、DataView なり BindingSource なりを使えば良いのですから、
先に書いたように、DataTable に受けて、DataTable 側から読み取るようにしてください。
どうしても ADODB だけでやるのであれば、せめて
name = rs.Fields("DBServer").Value
ではなく、
name = rs.Collect("DBServer")
の構文を使うことをお薦めします。
Fields 経由での取得を行うとなると、VB.NET においては
Fs = rs.Fields
F = Fs("DBServer")
name = F.Value
If Marshal.IsComObject(F) Then Marshal.ReleaseComObject(F)
If Marshal.IsComObject(Fs) Then Marshal.ReleaseComObject(Fs)
のように、Fields コレクションを解放する必要がある(※)ため、コードが煩雑になってしまいます。
(※) ADODB の PIA を参照設定している場合、Fields は COM ではないため、解放不要です。
しかし、Visual Studio によって自動生成された IA を参照設定している場合や レイトバインド時は、解放処理が必須となります。
(PIA を使ったとしても、Recordset や Connection は ReleaseComObject が必要ですが)
> .NetからADODBを使うのはあまりよくないような気がしたんですが、
そのとおり、多用は避けるべきでしょう。
実際、負荷の高い状況での利用には適さないようですし。
http://support.microsoft.com/kb/910696/en-us
http://support.microsoft.com/kb/321415/ja
> テーブルをXML化した場合はADOの技術のほうがいいんでしょうか...
もちろん、ふるふるさんが最初に提示されたように、
dataSet1.ReadXml("environ.xml")
name = dataSet1.Tables("row").Rows(0)("DBServer")
のように読み取る事は可能ですが、この方法だと、row テーブルの列がすべて String 型になってしまいますし、
主キー情報なども保持されません。(今回は、すべての列がテキストなので、たまたま問題が無かっただけで)
environ.xml の内容をキチンと解析して、型情報などを維持した DataSet/DataTable を
組み立てるには、今回の方法を用いた方が楽である、という事です。
もし、Recordset を使わず、かつ、元データの型情報なども維持させたいのであれば、
XSLT などを用いて、元の XML データを下記の形式に加工しておくという手もあります。
これならば、dataSet1.ReadXML するだけで、型情報なども維持されますよ。
<?xml version="1.0" standalone="yes"?>
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true"
msdata:MainDataTable="environ" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="environ">
<xs:complexType>
<xs:sequence>
<xs:element name="Environ" type="xs:string" minOccurs="0" />
<xs:element name="Machine" type="xs:string" minOccurs="0" />
<xs:element name="MyPath" type="xs:string" minOccurs="0" />
<xs:element name="DBServer" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<environ>
<Environ>Development</Environ>
<Machine>hogehage</Machine>
<MyPath>DEV</MyPath>
<DBServer>hogehage</DBServer>
</environ>
<environ>
<Environ>Testing</Environ>
<Machine>hogehage</Machine>
<MyPath>TEST</MyPath>
<DBServer>hogehage</DBServer>
</environ>
<environ>
<Environ>Production</Environ>
<Machine>hoge</Machine>
<MyPath>APPL</MyPath>
<DBServer>hoge</DBServer>
</environ>
<environ>
<Environ>QA</Environ>
<Machine>hogehage</Machine>
<MyPath>APPL</MyPath>
<DBServer>hogehage\QA</DBServer>
</environ>
</NewDataSet>
|