ラベル C# の投稿を表示しています。 すべての投稿を表示
ラベル C# の投稿を表示しています。 すべての投稿を表示

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まで網羅できないしなぁ。
        同じことでも、別な書き方が出来るみたい。
        サンプル追っかけるだけで終わるのはイヤだな。
        とりあえず拾ってくることまで出来た。
        何でこんな簡単なことに時間がかかるんだ!

    C#: ADOためす。

    遅れてきた中年柔軟鍛冶屋は、C#に突入~

    DAOは手間が掛かりそうだから、ADO.Netで。
    コネクションを閉じなくても勝手に閉じてくれるのかも調べる・・・
    閉じるよなぁ今時はフォーム閉じても。
    昔からフォーム閉じてもプロセス動き続けるとか罠仕様があるから。
    Net3.5/C#位になれば、面倒なことは減ってると思いたい。

    予想通り、フォームが壊されるときに、一緒に壊された。
    .Netになって閉じ忘れがなくなったのはホントだな。
    いいのか悪いのか。

    C#で片付け仕事をしこしこ・・・

    私は、10年近く底辺の仕事をやってます。
    そう、ベサツ用語の IT土方です。 

    ええ「北の国から」まんまです。
    無ければ何でも作るし、タダでも動きゃ良い。

    で、SharpDevelopで、C#を使いまして、以前
    買っていただいたAccess開発システムのお手直しをと。

    もう移行しちゃえば良いの判りますよ。
    でもねお客にお金ないんです。 もう終わってます:-p

    そんな金あったら働くみんなの給料に回してあげてください。
    というような中小企業。

    でも、彼らが10時間掛かる作業を30分で済ませるツールとか、
    取り付くシマも無い設備屋が持ってくるシステムをつなげて
    解析のお手伝いとか・・・まあ仕事は山ほどありまんにゃわ。

    で、も、お金が無い(笑)

    おいこの円高何とかしろ。


    で、本題です。
    とりあえず、 C#で取り組んでみた理由は「特になし」です。
    なんにもありませんなんにも。 まあCに似た言語だし、
    VBでアッサリだけど、あれウザイし、もう書きたくないし・・・。
    どうせC#だってそんなに覚えることは無いです。基本しか使いません。

    ポインタ経由しないでオブジェクトコールできるならそれで
    良いじゃないですか。C#ではそれが普通なんだから。
    で、思い切り速くしたければ、わかってる範囲で出来るのも魅力。
    苦手だったオブジェクト指向な世界も10年も舐めてれば、口の中で
    いつの間にか溶けてます。PHPですらOOになっちゃいました。

    で、今やってること。
    ・iniファイルの読み出し GetPrivateProfileString関数とか。

    GetPrivateProfileString ・ini-file read
      ・arg
         lpAppName:Section
         lpKeyName:Key
         lpDefault:
         lpReturnedString: Key Value
         nSize:length
         inifilename ini-file pathname
      ・Result  
          "string"



    ・DAO,ADOどっちかでmdbファイル開く(jet40) まだ調べてない。
    ・おかしな処理したレコードをはじいて直す。コレは簡単だろう。
     はじく前にバックアップ取るか、未定。

    多分3日くらいゴニョゴニョすれば終わるでしょう。1日でも
    終わるけど、雑事片付けながらだから無理。

    え、Accessでやってもいいんです。でも、あれいじりたくない。
    戻ったら最後死ぬまでAccessの修正やるんです。イヤです。
    どうせ後付した処理がどこかでバグ産んだんです。で、腐った
    ライブラリがどっかでメモリリークして死ぬので手に負えません。

    だったらクリーンな環境で、楽に作りたい。それだけです。
    新しいシステムを提案しても、罰が当たらないくらい動かして
    ます。ええAccess97があった時代からですもの。

    そろそろ提案したいんですけどねー。