私は2つのプロジェクト(テスト用のWord-TemplateプロジェクトとVB.Netコンソールアプリケーション)を含むVisual Studio 2008ソリューションを持っています。どちらのプロジェクトもMS-Access 2007データベースファイルへの接続を開くデータベースプロジェクトを参照し、System.Data.OleDbへの参照を持っています。データベースプロジェクトでは、私は次のようにデータテーブルを取得する機能を持っています
private class AdminDatabase
' stores the connection string which is set in the New() method
dim strAdminConnection as string
public sub New()
...
adminName = dlgopen.FileName
conAdminDB = New OleDbConnection
conAdminDB.ConnectionString = "Data Source='" + adminName + "';" + _
"Provider=Microsoft.ACE.OLEDB.12.0"
' store the connection string in strAdminConnection
strAdminConnection = conAdminDB.ConnectionString.ToString()
My.Settings.SetUserOverride("AdminConnectionString", strAdminConnection)
...
End Sub
' retrieves data from the database
Public Function getDataTable(ByVal sqlStatement As String) As DataTable
Dim ds As New DataSet
Dim dt As New DataTable
Dim da As New OleDbDataAdapter
Dim localCon As New OleDbConnection
localCon.ConnectionString = strAdminConnection
Using localCon
Dim command As OleDbCommand = localCon.CreateCommand()
command.CommandText = sqlStatement
localCon.Open()
da.SelectCommand = command
da.Fill(dt)
getDataTable = dt
End Using
End Function
End Class
Word 2007テンプレートプロジェクトからこの関数を呼び出すと、すべて問題なく動作します。エラーなし。しかし、コンソールアプリケーションから実行すると、次の例外が発生します。
ex = {"'Microsoft.ACE.OLEDB.12.0' プロバイダはに登録されていません ローカルマシン。 "}
どちらのプロジェクトにも同じ参照があり、コンソールアプリケーションは最初に書いたときに動作しました(少し前)が、現在は動作を停止しています。私は何かを見逃しているに違いありませんが、私は何を知りません。何か案は?
私はAccess 2007データベースを使用し、同じエラーを受けていたVisual Studio 2008とビジュアルベーシックプログラムを持っています。 64ビットシステムを実行している場合は、プログラムのプロパティで高度なコンパイル設定をx86に変更することを推奨するスレッドがいくつかあります。これまでのところ私は自分のプログラムに問題を抱えていません。
基本的に、64ビットマシンを使用している場合、IIS 7は(デフォルトでは)データベースエンジンが動作する32ビットアプリケーションに対応していません。だからここにまさにあなたがしていることです:
1)2007データベースエンジンがインストールされていることを確認します。これは次の場所からダウンロードできます。http://www.microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598-9B72-EF94E038C891&displaylang=en
2)IIS 7マネージャを開き、[アプリケーションプール]領域を開きます。右側のサイドバーに、「アプリケーションプールのデフォルト設定」というオプションがあります。それをクリックすると、ウィンドウにオプションがポップアップ表示されます。
3)2番目のフィールドで、[Enable 32-bit applications]がデフォルトでFALSEに設定されている可能性があります。 「false」と表示されている箇所をクリックして、「true」に変更します。
4)アプリプールを再起動します(これを行うには、STOPの代わりにRECYCLEを押してからSTARTを押しても機能します)。
5)完了し、あなたのエラーメッセージが消えます。
データベースは32ビット、コンソールは64ビットで64ビットシステムを実行していますか。 64ビットを実行し、報告したものと同じエラーを報告するMS Accessドライバはありません。
溶液:
それでおしまい!リンクをくれてありがとうArjun Paudel。これがXNA Creator's Club Onlineで見つけられた解決策です。それはStephen Styrchakによるものです。
次のエラーは私があなたが64bit用にコンパイルしていると信じることを私に示唆している:
'Microsoft .ACE.OELDB.12.0'プロバイダは、ローカルコンピュータに登録されていません
私はエクスプレス版を持っていませんが、次のステップは2008エクスプレスで有効ですか?
http://forums.xna.com/forums/t/4377.aspx#22601
にVC# Express
このプロパティは欠けていますが、探したい場所がわかっていればx86構成を作成できます。
それはステップの長いリストのように見えます、しかし一度あなたがこれらの事がどこにあるかを知っていればそれはずっと簡単です。持っているだけの人VC# Express
おそらくこれが役に立つでしょう。あなたが知ったらConfiguration Manager
次回はもっと直感的になります。
1. VC#Express 2005で、に進みます。Tools -> Options
。
2. [オプション]ダイアログボックスの左下隅にある、というボックスにチェックを入れます。"Show all settings"
。
3.左側のツリービューで、を選択します。"Projects and Solutions"
。
4.右側のオプションで、というボックスにチェックを入れます。"Show advanced build configuraions."
5.クリックOK
。
6.へBuild -> Configuration Manager
...
7.プロジェクトの横にあるプラットフォーム列で、コンボボックスをクリックして選択します。"<New...>"
。
8.で"New platform" setting, choose "x86"
。
9.クリックOK
。
10.クリックClose
。
これで、x86構成になりました。やさしい! :-)
私も使うことをお勧めしますConfiguration Manager
Any CPUプラットフォームを削除します。 32ビットのネイティブDLLへの依存関係(間接的な依存関係でさえも)があるのであれば、それは望ましくありません。
スティーブン・スティルチャックXNA Game Studio開発者http://forums.xna.com/forums/p/4377/22601.aspx#22601
問題のわずかに異なる状況に直面したときにこの質問を見つけ、それが将来他の苦しめられた魂に役立つかもしれないと考えたので、私は私が狙いを定めると思いました:
私はWindows Server 2008 64ビット上で実行されているIIS 7でホストされているASP.NETアプリケーションを持っていました。
IISはプロセスのビット数を制御しているので、私の場合の解決策はEnable32bitAppOnWin64設定をtrueに設定することでした。http://blogs.msdn.com/vijaysk/archive/2009/03/06/iis-7-tip-2-you-can-now-run-32-bit-and-64-bit-applications-on-the-same-server.aspx
IIS 6.0では、動作が多少異なります(アプリケーションプールレベルでEnable32bitAppOnWin64を設定することはできません)。http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/0aafb9a0-1b1c-4a39-ac9a-994adc902485.mspx?mfr=true
私は同じ問題を抱えています。私はwindows 7 64 bitにoffice 2010 64 bitをインストールしてから2007 Office System Driver:Data Connectivity Componentsをインストールしようとします。
その後、Visual Studio 2008はMS-Access 2007データベースファイルへの接続を開くことができます。
同様のStack Exchangeスレッドに関する私の投稿を参照してください。https://stackoverflow.com/a/21455677/1368849
私はこのPowerShellコードを実行することによって見つけた、12ではなくバージョン15をインストールしていました...
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
...これは私にこの結果を与えました(私は簡潔のために他のデータソースを削除しました)...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
私は32ビットのみにコンパイルした.NETアプリケーションで完全に更新されたWindows Vista Family 64ビットで同じエラーを持っています - プログラムは64ビットマシンのprogramx86フォルダーにインストールされています。 2007アクセスデータベースプロバイダがインストールされていても、同じインストールの/ wiothout SP2、IISがインストールされていて、32ビットアプリケーションサポート用に設定されたアプリケーションプールでもこのエラーメッセージが表示されます。
JET4.0が64ビットマシンで失敗していたので、私は自分のアプリをACE OLE DB.12.0に切り替えました - そしてそれは良くありません: - /私が見つけた最も有望なスレッドはこれでした:
http://ellisweb.net/2010/01/connecting-to-excel-and-access-files-using-net-on-a-64-bit-server/
64ビットの「2010 Office System Driver Beta:データ接続コンポーネント」をインストールしようとすると、32ビットのOfficeアプリケーションをすべてアンインストールせずに64ビット版をインストールすることはできません。 Office System Driver Beta:そのページ(および他のユーザー)が推奨する "Microsoft.ACE.OLEDB.14.0"の代わりに "Microsoft.ACE.OLEDB.12.0"をプロバイダとして使用しても、Data Connectivity Componentsは最初の問題を解決しません。
私の次の試みはこの記事に従うことです。
この問題は、OLEDB32.DLLとOLEDB32r.DLLがサーバーに登録されているのが間違っているためです。 64ビットバージョンが登録されている場合は、それらを未登録にしてから32ビットバージョンを登録する必要があります。これを修正するには、%Program Files%/ Common Files / System / OLE DBにあるバージョンの登録を解除します。次に、同じパスにあるが%Program Files(x86)%ディレクトリにバージョンを登録します。
64ビットマシン上のJET 4.0プロバイダとOLEDB ACEプロバイダの両方でそれほど問題を抱えている人はいますか?他のどれも動作しない場合、誰かが解決策を見つけましたか?
私はあなたが32ビットデータベースで64ビットシステムを実行していて、64ビットコンソールを実行しようとしているなら、以下のパッケージがマシンにインストールされる必要があると思います。
注:順序は重要と思われます - すでに何かインストールされている場合は、アンインストールして上記のステップに従ってください。