2010年11月7日日曜日

C#とADOでのあきらめ。 ADO.NETはoleDBへ。

やはりというか手探り状態で進める癖がある私は、
またも、面倒な山にスタックしたのだった。

SQLでレコードが拾えない感じ。
テーブルにはアクセスしてるんだが・・・
うーむ面倒臭い。いやだコレなにこれ。


DAO → ADO → ADO.NET
-----------------------------
ODBC OLE2(ActiveX) ole.NET


ADOは、WindowsXP全盛のMFC時代の遺構であり、
DAOは、更に古い遺跡である。
過去にはODBCがあり、MDACがあり、今はOleDBがある。
なんとも、重なり合って無駄臭い。

この辺り、データベース取り扱いの手段だけでも
軽く本が何冊も並び、同じ結果をもたらす、異なる
手順が、常に別の表現に変わり・・・・

まあ歴史的にこの上にもっと大きな時代の変化というか、
ISAM、btrieveから、SQL規格、オブジェクトDBだのと
DB世界の流行変遷が、毎回毎回手を換え品を換え・・・と。

 いわくコード再利用が容易になると触れ込んだものは、
すべて手間の掛かる前準備が必要だったし、ゴテゴテと
要らない機能を積み込んだ、街中で見かける小汚い修繕用
車両の道具箱のように散らかっている状態が延々と続く。


さて、ADOからoledb移行について調べるとするか。 無駄足だった。

まとめ

・判ったことを書くとこうなる。

  • ADOまでは2つで済んだオブジェクトが4階層。
  •  

    ADOなら、connection -> recordset を呼び出すだけ。
      例はうまく動かないから、これはもしかすると手抜きかもしれない。

      oleDB(ADO.NET?) だと・・・

       OleDbConnection
       |
    OleDbCommand
    |
    +-OleDbDataAdapter
    |
    +--- DataSet

  • 実際は下記の通りで似通っている部分があるから流用可能。




  • ADODB.Connection cnn = new ADODB.Connection();
    ADODB.Recordset rs = new ADODB.Recordset();
    cnn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Dbfilename_nohind + ";", "", "", 0);



    OleDbConnection oleConn2 =new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Dbfilename_nohind + ";");

    ////

    oleCmd2 = oleConn2.CreateCommand();
    oleCmd2.CommandText = strSQL;
    oleAdp2 = new OleDbDataAdapter(oleCmd2);
    oleAdp2.Fill(dts,"nohindata");
    DataGrid1.SetDataBinding(dts, "nohindata");




    追記: どうもこの辺り嘘ばっかり書いている気がする。
        .NETだけでも1.1~4.0まで網羅できないしなぁ。
        同じことでも、別な書き方が出来るみたい。
        サンプル追っかけるだけで終わるのはイヤだな。
        とりあえず拾ってくることまで出来た。
        何でこんな簡単なことに時間がかかるんだ!

    0 件のコメント: