プロが教えるわが家の防犯対策術!

いつもお世話になっております。
以下の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/gg182 …

-----------------------------------------------------------------------
データベースに接続する構成ができずにデータベースに接続できないといったことが起こります。しかし、32 ビットと 64 ビットの特性を正しく理解できれば、「%windir%\SysWOW64\odbcad32.exe」へアクセスすることで今まで通り ODBC ドライバを扱うことができます。
-----------------------------------------------------------------------

%windir%\SysWOW64\odbcad32.exeにアクセスするようにするには、
どのようなプログラムを書けばよいのでしょうか。

どなたかご教授よろしくお願いいたいます。

A 回答 (1件)

デフォルトの設定は AnyCPU という設定になっていて、



実行環境が 64bit なら 64bit アプリケーションとして
実行環境が 32bit なら 32bit アプリケーションとして

動作するようになっているようです。
なので、

コントロールパネル->管理ツール->データソース(ODBC)

のデータソースの方を参照しているのでしょう。
Standard 以上の Edition であればプロジェクトのプロパティで

AnyCPU/x86(32bi)/x64(64bit)

などから選択できるようになっていますが、Express Edition では選択できない(該当する項目がない)ようです。
http://msdn.microsoft.com/ja-jp/library/5b4eyb0k …

ですが、Express Edition であっても .csproj ファイルの

<PropertyGroup ~ >
・・・
</PropertyGroup>

の中の

<PlatformTarget>AnyCPU</PlatformTarget>



<PlatformTarget>x86</PlatformTarget>

に書き換えれば(なければ追加)32bit 固定になり、64bit 環境でも 32bit アプリケーションとして動作するようになるらしいです。
    • good
    • 0
この回答へのお礼

tsukasa-12rさん ご返答ありがとうございます。
csprojをテキストエディタで開いて編集しようとしたところ

<PropertyGroup>...

<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
というような箇所が3箇所あったのですべて
AnyCPU->x86と直してプロジェクトを開いたのですが、ビルドされなくなってしまいました。

Expressエディションはできないのかもしれません。

Standard 以上の Edition であればプロジェクトのプロパティで

AnyCPU/x86(32bi)/x64(64bit)
でできるということですので、試しては無いのですが、解決といたします。

お礼日時:2012/02/06 21:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています