山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

C#でmdbファイルのODBCリンクを書き換える

C#はネット上の情報が少なくMSDNのリファレンスも

ごちゃごちゃ、DBアクセスの技術もADOやらADOXやら

ADO.NETやらDAOにOLE DBと似たようなのがいっぱい

あって死にそうです。


C#からMS Accessmdbファイルの中身の

Oracleへのリンクテーブルにパスワードを

埋め込むことに成功したのでご紹介します。

以下のようなコードになります。


DAO.DBEngine dbe = new DAO.DBEngineClass();
DAO.Workspace ws = dbe.Workspaces[0];
DAO.Database db = ws.OpenDatabase("C:\\access\\kenshou1.mdb");
DAO.TableDef td = db.TableDefs["SCHEMA_TABLE"];
Debug.WriteLine("connect:" + td.Connect);
td.Connect = "パスワード入り接続文字列";
td.Attributes = (int)Microsoft.Office.Interop.Access.Dao.TableDefAttributeEnum.dbAttachSavePWD;
td.RefreshLink();
db.Close();
ws.Close();


Microsoft DAO 3.6 Object Libraryに参照設定を

してください。

パスワード入り接続文字列は実際にパスワードを

保存する設定でリンクテーブルを作って比較

しました。

セミコロンで区切ってあれば順不同なのかも

しれませんが未確認です。

td.Attributes = ...dbAttachSavePWD;

がミソです。

これがないといくらやってもパスワードが

入りません。


ADOXでも惜しいところまでできましたが

最後にCOMExceptionになってしまいました。


それにしてもC#のDAOのJavaDocみたいなもの

はないんでしょうか。

MSDNにはVBのしかないからそれを見つつ

Visual Studioの自動補完を併用しつつ

試しながらやったのですが

こんな手探りな方法しかないんでしょうか。