13

Access データベースに対して OleDbConnection、OldDbCommand、および OleDbReader を使用しています。

コードから呼び出しているデータベースに名前付きクエリがあります。

アクセスから実行すると、クエリは正しく機能します。

いくつかのリソースは、クエリで予約語を使用し、それらを括弧で囲むことによってエラーが発生する可能性があることを示しています。私は予約語を使用しておらず、すべての列名を括弧で囲んで除外しています。

問題がどこにあるかを判断しようとして、クエリを単純化しました

SELECT id FROM table1 WHERE id = 5 

Ole 接続は例外をスローしません。

クエリの次の部分を紹介すると:

SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5" 

その後、例外が発生します。

例外の詳細は次のとおりです。

  • メッセージ: IErrorInfo.GetDescription は E_FAIL (0x80004005) で失敗しました。
  • エラーコード: -2147467259
  • ネイティブ エラー: -533136361
  • SQL 状態: 3000
4

3 に答える 3

13

クエリに予約語が含まれていないと言ったのは明らかに間違いでした。

私が使用していたクエリは、Access データベースの別のクエリから選択していました。その他のクエリには、問題の原因となっている予約済みのキーワードが含まれていました。

ところで:

Access データベース エンジンは、Access、データ アクセス オブジェクト、Access データベース エンジン用の Microsoft OLE プロバイダー、または Microsoft Access ODBC ドライバーのいずれから呼び出されたかによって、さまざまなモードで実行されます。ANSI モードまたは非 ANSI (従来の) モードで実行できます。

これら 2 つのモードを使用すると、わずかに異なる 2 つの予約語セットが生成されるため、予約語を使用するクエリは、あるモードでは機能し、別のモードでは失敗する可能性があります。

Access 2007 の予約語と記号

キース

于 2013-03-25T13:50:03.323 に答える
4

この例外の別の考えられる原因は、ロード/読み取りしようとしているファイルが存在しない場合です。

ファイルを開こうとする前に「File.Exists」を実行すると、コードが「IErrorInfo.GetDescription failed with E_FAIL」例外の特定の原因を正しく検出できるようになると便利です。

于 2013-09-30T14:03:23.153 に答える