64bit WindowsでMDBを使用する
今日は意外なところで64bitを意識したコードを書くことになりました。
MDBを読み込んでSQL Serverのスキーマにコンバートする処理があったのですが
どうやら64bit環境では具合が悪いみたいです。
64bit環境ではMicrosoft.Jet.OLEDB.4.0が未登録とかで動かないんですね。
一番楽な解決方法は、ビルドの構成をAnyCPUからx86に変更することみたいです。
なるほど・・・
もう一つの解決方法
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをインストールする方法。
こちらはソースに少し手を入れる必要があります。
と言ってもすごく簡単
今まで書いてた接続文字列を
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxx.mdb"
から
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xxx.mdb"
に書き換えるだけ。
あとは64bit環境かを識別して接続文字列を切り替えてもいいし
完全に"Microsoft.ACE.OLEDB.12.0"切り替えても良いですね。
この方法は明確に問題を解決していてスッキリするのですが
別のコンポーネントをインストールする必要があるのでそこが問題になりますね。
今回は32bitと64bitに切り替える実装だけして
64bitかの判定で常に32bitを返すようにしてx86のビルドに^^;
将来の64bit化への要望があったので切り替える実装だけは残すことにしました。
別のコンポーネントをさらにインストールするのはなかなか難しいですね。
予定外の作業だったけど、色々と勉強になりました。
そういえば、この作業に没頭しててチューニング中のソースを
別のブランチにした後どうしたか覚えてないや^^;
明日思い出そう。
MDBを読み込んでSQL Serverのスキーマにコンバートする処理があったのですが
どうやら64bit環境では具合が悪いみたいです。
64bit環境ではMicrosoft.Jet.OLEDB.4.0が未登録とかで動かないんですね。
一番楽な解決方法は、ビルドの構成をAnyCPUからx86に変更することみたいです。
なるほど・・・
もう一つの解決方法
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントをインストールする方法。
こちらはソースに少し手を入れる必要があります。
と言ってもすごく簡単
今まで書いてた接続文字列を
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=xxx.mdb"
から
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xxx.mdb"
に書き換えるだけ。
あとは64bit環境かを識別して接続文字列を切り替えてもいいし
完全に"Microsoft.ACE.OLEDB.12.0"切り替えても良いですね。
この方法は明確に問題を解決していてスッキリするのですが
別のコンポーネントをインストールする必要があるのでそこが問題になりますね。
今回は32bitと64bitに切り替える実装だけして
64bitかの判定で常に32bitを返すようにしてx86のビルドに^^;
将来の64bit化への要望があったので切り替える実装だけは残すことにしました。
別のコンポーネントをさらにインストールするのはなかなか難しいですね。
予定外の作業だったけど、色々と勉強になりました。
そういえば、この作業に没頭しててチューニング中のソースを
別のブランチにした後どうしたか覚えてないや^^;
明日思い出そう。