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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
>>それでもどこかに古いパスが残っているのかも知れないと、念のためプロジェクト全体を検索しましたが、どこにも見つかりませんでした。
プロジェクト全体ではなく、ソリューション全体で検索してみてはどうでしょう?ただ、プログラムが1プロジェクトのみで構成されているなら、これは関係ないですけどね。
また、ソリューションユーザオプションの *.suo も削除してみてください。
それから、どこかのテキストファイルの中にパスを記録しているのかもしれませんので、ディレクトリ以下のファイルを全てテキスト検索してみるのもいいかと思います。(私の使っているPeggyPro for PHPエディターは、サブディレクトリーまで検索してくれますので、こういう検索時に役立っています)
どうしてもダメなら、別ディレクトリの下に、作成したソリューションのディレクトリやファイルをコピーして、不要なファイル(怪しいと思うファイル)を削除してビルドし、動作がどうなるか?を確認してみるのも価値があると思います。そのディレクトリー下には、本来、古いパスの情報が無いはずですから、たとえエラーが発生しても古いパスが表示されなくなるはずですのでね。
基本的に、.Net Frameworkで作成したプログラムはレジストリ登録不要で動作しているはずですので、プロジェクト(ソリューション)ディレクトリの下に全情報があると思っています。どこかに古いパスが残っていると思います。
この回答への補足
lv4uさん、たびたびありがとうございます。
全てのディレクトリで接続文字列を検索しましたが、見つかりませんでした。
バイナリ変換されている気もしますが。
ひとつ気になった点があります。
[新しいデータソースの追加]-[データソース構成ウィザード]に、古いデータ接続(接続文字列も含む)が表示されています。
これは新規にソリューションを作成しても、規定値のように表示されます。
この古いデータ接続情報は、ウィザードでは削除できません。
Visual Studioは、このデータ接続情報をどこに保持しているのでしょう...
No.1
- 回答日時:
エラーメッセージが「パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。
」っていうことですので、AccessのMDBファイルの場所が正しく認識されていないのだと思えます。(私はC#でAccessファイルを使っていますが、先日、同様のエラーが出ました。)たぶん、データセットのソースかどこかを探せば、古いパスが残っていると思いますので、それを検索して、正しいパスに修正してあげれば、直ると思います。
Visual Studio (VS)は、メタ・プログラミングの考え方を取り入れて、私たちの入力に反応して、ソースコードを色々と生成してくれています。クリーンな状態からソースコードを生成される場合は、問題が起こりにくいですけど、今回のように、一応出来上がった後に、一部を修正したような場合、関連するソースコードがうまく生成・修正されないことがあります。ある意味、VSのバグといえるかもしれませんね。
自動生成されたソースコードには、「このコードを変更しないでください」みたいなコメントが入っていると思いますけど、リビルドでは解決せず、その警告を無視して、生成されたソースコードを削除・修正してあげないと解決できないことがありますので、VSを使うときには、注意が必要みたいです。
ちなみに、上記の問題以外でも、「なんでエラーが解消されないの?自分の入力したコードに間違いは無いはずなのに?リビルドしたのに?」と思うことが何度かあって、問題のある自動生成ソースコードを探すのに時間とられました・・・。
この回答への補足
lv4uさん、回答いただきありがとうございます。
今回作成したコードについて補足します。
私もVisual Studioに自動生成させた際のデメリットとしてlv4uさんがおっしゃられる点を感じています。
そのため、今回は自動生成を行っておりません。
それでもどこかに古いパスが残っているのかも知れないと、念のためプロジェクト全体を検索しましたが、どこにも見つかりませんでした。
しかしエラーに記されているパスは古いものですので、どこかに古いパスが残っているはずなのです。
一からプロジェクトを作成し直しても同じエラーになるので、Visual Studioはどこにその古いパスを隠し持っているのかが分かりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
EXCEL(VBA)で指定フォルダ内の...
-
パスワード保護されたExcelファ...
-
SaveAsの保存先について
-
Excel VBAでテキストファイルを...
-
エクセルVBAで一つ上の階層...
-
【VB.NET】App.configにファイ...
-
初心者powershellのPS1ファイル...
-
ExcelVBAの使い方 ¥の使い方...
-
Excel 相対パス
-
ファイルストリームからファイ...
-
VB2005 でパス名が誤っていない...
-
fopenでのパス指定
-
ShellExecuteでエクセルファイ...
-
VBAでテキストファイル中の文字...
-
エクセルのマクロで特定フォル...
-
VBAで、VBのapp.pathと同じ機能...
-
CreateProcess error=0
-
ListViewにSETしたファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイル 二つ上のディ...
-
エクセルvbaでdocuworksprinter...
-
エクセルVBAで一つ上の階層...
-
Excel 相対パス
-
【VB.NET】App.configにファイ...
-
xcopyコマンドの進行状況を表示...
-
【VBA】ExcelマクロでCSVファイ...
-
EXCEL(VBA)で指定フォルダ内の...
-
エクセルのマクロで特定フォル...
-
パスワード保護されたExcelファ...
-
ExcelVBAの使い方 ¥の使い方...
-
開いているファイルを削除し、...
-
SaveAsの保存先について
-
初心者powershellのPS1ファイル...
-
fopenでのパス指定
-
VBA★PDFをPDFアプリで印刷し...
-
【Excel VBA】Power Qurry のソ...
-
指定したフォルダ内の最新ファ...
-
A列に記載されているフォルダ...
-
ExcelのVBAで上書き保存を確...
おすすめ情報