最近,有pdf.net使用者問我怎麼在64位系統下無法訪問access資料庫的問題,我第一反應是我怎麼沒有遇到呢?今天一看自己的vs和office都是32位版本的,所以在vs裡面除錯訪問access是沒有問題的,但是直接使用編譯好的.net程式訪問access,就出問題了,報:
未在本地計算機上註冊「microsoft.jet.oledb.4.0」提供程式。
於是,又在公司的電腦上(win7 64位)做了實驗,發現跟家裡面的win8.1 64位 問題一樣,上網搜尋了一下,大部分都建議將.net程式編譯的時候,目標平台設定為 x86 ,我試了下,果然成功。
但是,如果你的.net程式是別人編譯好的,且在64位系統上執行,要訪問access資料庫,怎麼辦呢?
首先想到,看能否通過應用程式配置檔案,將.net程式配置成執行在 32位 系統下,找了很久資料,無果,放棄。
再想想,是不是跟自己的office是32位有關呢?
關鍵問題不在於是access 2010還是access 2013而已,不必鑽牛角尖,何不求其次,安裝乙個access 2007/2010的database engine不就行了。
解決辦法:
① ②
開啟你的.net應用程式配置檔案(應用程式名.config,web應用程式為 web.config),設定資料庫連線字串的provide microsoft.ace.oledb.12.0,例如標準連線字串為:"provider=microsoft.ace.oledb.12.0;data source=data.accdb;persist security info=false;"
再次執行程式,ok,資料庫連線成功,一切正常。
注意:64位系統下一定要修改提供程式為 microsoft.ace.oledb.12.0,而此時的檔名,可以是 早期的 mdb檔案,也可以是新的 accdb 檔案。
如果你雖然是64位系統,但是你的office 是32位的,所以你只能安裝32位的ace驅動,因此你的.net應用程式也只能發布成32位的,如果編譯成anycpu版本,還是無法訪問ace。
(ps:如果你發布成x86格式的目標平台,並且不想使用accdb格式的access資料庫檔案,那麼就不必安裝上面的32位ace驅動了,省得折騰:-《)
此問題受影響的 pdf.net 開發框架相關程式:
pdf.net_v4.6 winform 資料表單例項
64位系統asp連線access資料庫
今天在使用asp 後台時發現在64bit windows2008下,訪問資料庫失敗,報錯驅動程式未安裝。網上絕大多數的方法都是到應用程式池的高階設定中,把允許32位程式啟用,的確可以解決。這樣就相當於程式使用32位的效能,那麼公升級作業系統公升級伺服器還有什麼意義呢。個人覺得更科學的方式是修改此as...
32位系統和64位系統
前言 眾所周知,我們通常說作業系統是32位還是64位說的其實是32位處理器 cpu 還是64位處理器 cpu windows系統有32位和64位之分,下面我們來總結一下32位系統和64位系統的原理 區別以及如何判斷。我們現在所稱的計算機系統是32位或64位主要依據的是cpu解析的字組大小 字組大小 ...
Linux 關於64位系統
1.判斷linux系統是32位還是64位的方法 getconf long bit 2.判斷乙個檔案是32位還是64位的方法 file lib x.so libsyssp.so elf 32 bit lsb shared object,intel 80386,version 1 sysv stripp...