• ベストアンサー

64bit環境で32bitのodbc参照

いつもお世話になっております。 以下のC#のプログラムを windows 7 home premium(x64) visual studio 2008 express edtion (x86) でビルドして実行すると 一番最後の行(da.Fill(dt);)のところで ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。 という例外がでます。 //CSVファイルのあるフォルダ string csvDir = @"D:\"; //CSVファイルの名前 string csvFileName = "test.csv"; //接続文字列 string conString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + csvDir + ";Extensions=asc,csv,tab,txt;"; System.Data.Odbc.OdbcConnection con = new System.Data.Odbc.OdbcConnection(conString); string commText = "SELECT * FROM [" + csvFileName + "]"; System.Data.Odbc.OdbcDataAdapter da = new System.Data.Odbc.OdbcDataAdapter(commText, con); //DataTableに格納する DataTable dt = new DataTable(); da.Fill(dt); たしかにスタート->コントロールパネル->管理ツール->データソース(ODBC)の ドライバーの欄を見るとMicrosoft Text Driverが入っていません。 しかし、 C:\Windows\SysWOW64\odbcad32.exe を実行してドライバーを見ると Microsoft Text Driver (*.txt; *.csv) が入っているので、32ビットのほうには入っていると思っています。 下記サイトに以下のような記載があるのですが、 http://technet.microsoft.com/ja-jp/windows/gg182762 ----------------------------------------------------------------------- データベースに接続する構成ができずにデータベースに接続できないといったことが起こります。しかし、32 ビットと 64 ビットの特性を正しく理解できれば、「%windir%\SysWOW64\odbcad32.exe」へアクセスすることで今まで通り ODBC ドライバを扱うことができます。 ----------------------------------------------------------------------- %windir%\SysWOW64\odbcad32.exeにアクセスするようにするには、 どのようなプログラムを書けばよいのでしょうか。 どなたかご教授よろしくお願いいたいます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

デフォルトの設定は AnyCPU という設定になっていて、 実行環境が 64bit なら 64bit アプリケーションとして 実行環境が 32bit なら 32bit アプリケーションとして 動作するようになっているようです。 なので、 コントロールパネル->管理ツール->データソース(ODBC) のデータソースの方を参照しているのでしょう。 Standard 以上の Edition であればプロジェクトのプロパティで AnyCPU/x86(32bi)/x64(64bit) などから選択できるようになっていますが、Express Edition では選択できない(該当する項目がない)ようです。 http://msdn.microsoft.com/ja-jp/library/5b4eyb0k(v=vs.100).aspx ですが、Express Edition であっても .csproj ファイルの <PropertyGroup ~ > ・・・ </PropertyGroup> の中の <PlatformTarget>AnyCPU</PlatformTarget> を <PlatformTarget>x86</PlatformTarget> に書き換えれば(なければ追加)32bit 固定になり、64bit 環境でも 32bit アプリケーションとして動作するようになるらしいです。

kaoru424233254
質問者

お礼

tsukasa-12rさん ご返答ありがとうございます。 csprojをテキストエディタで開いて編集しようとしたところ <PropertyGroup>... <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> というような箇所が3箇所あったのですべて AnyCPU->x86と直してプロジェクトを開いたのですが、ビルドされなくなってしまいました。 Expressエディションはできないのかもしれません。 Standard 以上の Edition であればプロジェクトのプロパティで AnyCPU/x86(32bi)/x64(64bit) でできるということですので、試しては無いのですが、解決といたします。