アプリ版:「スタンプのみでお礼する」機能のリリースについて

OS:Windows7
Visual Studio2012Professional


いつもこちらでお世話になっています。

OleDbプロバイダーのOleDbDataAdapterでAccessファイルからDataSetへデータを取込む作業をしています。
下記のコードで、一度はDataSetへデータを取り込めたのですが、接続文字列を変更したところ、変更前の接続文字列(パス)を参照に行ってしまいエラーになります。

リビルドしたり、プロジェクトを作成し直したりしましたが、やはり変更前の接続文字列を使用してしまいます。


【コード】
private void Form1_Load ( object sender, EventArgs e ) {
 string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\hoge変更後\○○.mdb;"
 string sql = @"SELECT * FROM Table;";
 DataSet ds = new DataSet();
 OleDbConnection cn = new OleDbConnection();
 cn.ConnectionString = connectionString;
 OleDbCommand cmd = new OleDbCommand();
 using (OleDbDataAdapter da = new OleDbDataAdapter()) {
 cmd.Connection = cn;
 cmd.CommandText = sql;
 da.SelectCommand = cmd;
 da.Fill( ds ); ← ここで『System.Data.OleDb.OleDbException』エラー
  }
this.dataGridView.DataSource = ds.Tables[0];
}

【エラー】
System.Data.OleDb.OleDbException はハンドルされませんでした。
HResult=-2147467259
Message=パス 'D:\hoge前\○○.mdb' は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。
Source=Microsoft JET Database Engine
ErrorCode=-2147467259



どなたか原因がおわかりになりますでしょうか。

どうぞよろしくお願いいたします。

A 回答 (2件)

>>それでもどこかに古いパスが残っているのかも知れないと、念のためプロジェクト全体を検索しましたが、どこにも見つかりませんでした。



プロジェクト全体ではなく、ソリューション全体で検索してみてはどうでしょう?ただ、プログラムが1プロジェクトのみで構成されているなら、これは関係ないですけどね。
また、ソリューションユーザオプションの *.suo も削除してみてください。

それから、どこかのテキストファイルの中にパスを記録しているのかもしれませんので、ディレクトリ以下のファイルを全てテキスト検索してみるのもいいかと思います。(私の使っているPeggyPro for PHPエディターは、サブディレクトリーまで検索してくれますので、こういう検索時に役立っています)

どうしてもダメなら、別ディレクトリの下に、作成したソリューションのディレクトリやファイルをコピーして、不要なファイル(怪しいと思うファイル)を削除してビルドし、動作がどうなるか?を確認してみるのも価値があると思います。そのディレクトリー下には、本来、古いパスの情報が無いはずですから、たとえエラーが発生しても古いパスが表示されなくなるはずですのでね。

基本的に、.Net Frameworkで作成したプログラムはレジストリ登録不要で動作しているはずですので、プロジェクト(ソリューション)ディレクトリの下に全情報があると思っています。どこかに古いパスが残っていると思います。

この回答への補足

lv4uさん、たびたびありがとうございます。

全てのディレクトリで接続文字列を検索しましたが、見つかりませんでした。
バイナリ変換されている気もしますが。


ひとつ気になった点があります。
[新しいデータソースの追加]-[データソース構成ウィザード]に、古いデータ接続(接続文字列も含む)が表示されています。

これは新規にソリューションを作成しても、規定値のように表示されます。
この古いデータ接続情報は、ウィザードでは削除できません。
Visual Studioは、このデータ接続情報をどこに保持しているのでしょう...

補足日時:2013/09/23 09:09
    • good
    • 0

エラーメッセージが「パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。

」っていうことですので、AccessのMDBファイルの場所が正しく認識されていないのだと思えます。(私はC#でAccessファイルを使っていますが、先日、同様のエラーが出ました。)
たぶん、データセットのソースかどこかを探せば、古いパスが残っていると思いますので、それを検索して、正しいパスに修正してあげれば、直ると思います。

Visual Studio (VS)は、メタ・プログラミングの考え方を取り入れて、私たちの入力に反応して、ソースコードを色々と生成してくれています。クリーンな状態からソースコードを生成される場合は、問題が起こりにくいですけど、今回のように、一応出来上がった後に、一部を修正したような場合、関連するソースコードがうまく生成・修正されないことがあります。ある意味、VSのバグといえるかもしれませんね。
自動生成されたソースコードには、「このコードを変更しないでください」みたいなコメントが入っていると思いますけど、リビルドでは解決せず、その警告を無視して、生成されたソースコードを削除・修正してあげないと解決できないことがありますので、VSを使うときには、注意が必要みたいです。

ちなみに、上記の問題以外でも、「なんでエラーが解消されないの?自分の入力したコードに間違いは無いはずなのに?リビルドしたのに?」と思うことが何度かあって、問題のある自動生成ソースコードを探すのに時間とられました・・・。

この回答への補足

lv4uさん、回答いただきありがとうございます。

今回作成したコードについて補足します。
私もVisual Studioに自動生成させた際のデメリットとしてlv4uさんがおっしゃられる点を感じています。

そのため、今回は自動生成を行っておりません。
それでもどこかに古いパスが残っているのかも知れないと、念のためプロジェクト全体を検索しましたが、どこにも見つかりませんでした。


しかしエラーに記されているパスは古いものですので、どこかに古いパスが残っているはずなのです。


一からプロジェクトを作成し直しても同じエラーになるので、Visual Studioはどこにその古いパスを隠し持っているのかが分かりません。

補足日時:2013/09/22 10:35
    • good
    • 0

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