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のVisual Basicプログラムがあり、同じエラーを受け取っていました。 64ビットシステムを実行している場合、プログラムのプロパティで高度なコンパイル構成をx86に変更するようにアドバイスするスレッドをいくつか見つけました。これまでのところ、プログラムに問題はありません。
基本的に、64ビットマシンを使用している場合、IIS 7は(デフォルトでは)データベースエンジンが動作する32ビットアプリを提供しません。だからここにあなたがやっていることを正確に:
1)2007データベースエンジンがインストールされていることを確認します。これは次の場所からダウンロードできます: http://www.Microsoft.com/downloads/details.aspx?FamilyID=7554F536-8C28-4598- 9B72-EF94E038C891&displaylang = en
2)IIS7マネージャーを開き、[アプリケーションプール]領域を開きます。右側のサイドバーに、「アプリケーションプールのデフォルトを設定する」というオプションが表示されます。クリックすると、オプションが表示されたウィンドウがポップアップします。
3)2番目のフィールド(「32ビットアプリケーションを有効にする」)は、おそらくデフォルトでFALSEに設定されています。 「false」と表示されている場所をクリックして、「true」に変更します。
4)アプリプールを再起動します(これは、STOP、STARTの代わりにRECYCLEを押すことで実行できます。これも機能します)。
5)完了し、エラーメッセージが消えます。
データベースを32ビットで実行し、コンソールを64ビットで実行する64ビットシステムを実行していますか? 64ビットを実行し、報告したものと同じエラーを報告するMS Accessドライバーはありません。
解決策:
それでおしまい!リンクしてくれたArjun Paudelに感謝します。 XNA Creator's Club Onlineにあるソリューションを次に示します。 Stephen Styrchakによるものです。
次のエラーは、64ビット用にコンパイルしていると信じていることを示唆しています。
「Microsoft .ACE.OELDB.12.0」プロバイダーがローカルマシンに登録されていません
エクスプレス版はありませんが、2008エクスプレスでは次の手順が有効ですか?
http://forums.xna.com/forums/t/4377.aspx#22601
http://social.msdn.Microsoft.com/Forums/en-US/vbgeneral/thread/ed374d4f-5677-41cb-bfe0-198e68810805/?prof=required
-Arjun Paudel
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.0でホストされている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
同様のスタック交換スレッドに関する私の投稿を参照してください 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
私は同じ問題を抱えています。 Windows 7 64ビットにOffice 2010 64ビットをインストールしてから、2007 Office System Driver:Data Connectivity Componentsをインストールしようとしています。
その後、Visual Studio 2008はMS-Access 2007データベースファイルへの接続を開くことができます。
32ビットのみにコンパイルした.NETアプリケーションで完全に更新されたWindows Vistaファミリ64ビットでも同じエラーが発生します。プログラムは64ビットマシンのprogramx86フォルダーにインストールされます。 2007アクセスデータベースプロバイダーがインストールされていても、同じインストール済みの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:Data Connectivity Components」をインストールしようとすると、すべての32ビットオフィスアプリケーションをアンインストールせずに64ビットバージョンをインストールできないこと、および2010の32ビットバージョンをインストールできないことがわかります。 Office System Driver Beta:Data Connectivity Componentsは、そのページ(およびその他)が推奨する「Microsoft.ACE.OLEDB.14.0」ではなく「Microsoft.ACE.OLEDB.12.0」をプロバイダーとして使用しても、最初の問題を解決しません。
私の次の試みは、この投稿に従うことです。
この問題は、OLEDB32.DLLとOLEDB32r.DLLのフレーバーがサーバーに登録されているために発生します。 64ビットバージョンが登録されている場合は、登録を解除してから、32ビットバージョンを登録する必要があります。これを修正するには、%Program Files%/ Common Files/System/OLE DBにあるバージョンの登録を解除します。次に、同じパスでバージョンを%Program Files(x86)%ディレクトリに登録します。
64ビットマシンのJET4.0プロバイダーとOLEDB ACEプロバイダーの両方で問題が発生した人はいますか?他のどれも機能しない場合、誰かが解決策を見つけましたか?
32ビットデータベースで64ビットシステムを実行していて、64ビットコンソールを実行しようとしている場合、次のパッケージをマシンにインストールする必要があると想定しています。
注:順序は重要と思われるため、既に何かがインストールされている場合は、アンインストールして上記の手順に従ってください。