2011-04-30 50 views
0

我開發了一個小應用程序,它使用VB.net訪問我的計算機上的MS訪問數據庫。我在Windows XP 32位上開發了這個程序。目前,我正在使用Windows 7 64位,該程序根本無法運行。當我嘗試對數據庫執行任何操作時,會收到空引用異常。我已經縮小了這一點,我想對數據庫提供者。我正在使用Provider=Microsoft.Jet.OLEDB.4.0;並嘗試使用Provider=Microsoft.ACE.OLEDB.12.0;。這兩個似乎都沒有工作。我的數據庫的路徑是100%正確的。這是我得到的錯誤:在Windows 7中訪問數據庫的問題MS Visual Studio

空引用異常未處理。 未將對象引用設置爲對象的實例。

就像我說的程序在Windows XP機器上運行良好。如果它有助於訪問數據庫文件擴展名是mdb。

回答

1

不存在用於訪問Access數據庫文件的64位DLL,因此您必須轉到項目屬性並在「編譯」選項卡上轉到「高級編譯選項」並將「目標CPU」設置爲「x86」幫助。

0

聽起來不像Provider錯誤,因爲Jet部分沒有問題。確保你的數據源路徑是正確的。如果您將它放在VS的Projects文件夾中並且正在使用完整路徑,則可能需要更改,因爲文件系統是如何通過用戶與文檔和設置進行設置的。

+0

路徑是正確的。 – 2011-04-30 21:52:54

+0

@Nicklas看看你是否有這些文件。 提供商= Microsoft.Jet.OLEDB.4.0 C:\ WINNT \ System32下\ Msjetoledb40.dll C:\ WINNT \ System32下\的Msjet40.dll C:\ WINNT \ System32下\ Mswstr10.dll C:\ WINNT \ System32 \ Msjter40.dll C:\ WINNT \ System32 \ Msjint40.dll – 2011-05-01 00:28:55

+0

我發現了一個很好的資源。查看[鏈接](http://support.microsoft.com/kb/239114/) – 2011-05-01 00:47:11

1

我有完全相同的問題,除了寫入SQL 2008數據庫。 VS2008,帶框架3.5的VB.net代碼,Windows 7 64位。代碼在XP上運行良好。

John R的答案提供了正確的解決方案:更改項目的高級編譯選項以將「目標CPU」設置爲「x86」。

此問題可能比最初描述的症狀更多。我將概括它們:

訪問ACCESS不是唯一的問題;它也發生在SQL(至少MS SQL 2008)上。

某些數據庫調用可以並且可以工作。就好像這些電話會讓你失敗一樣,但是失敗的地方會在你的程序的隨機點發生。

我看到的故障點是在子程序調用期間。 (只是一個正常的調用我在VB中創建的子例程)。圍繞調用放置一個try-catch塊將不會發現錯誤。

下面是最奇怪的部分:在錯誤的子程序調用之前,代碼有一個HANDLED異常。具有諷刺意味的是,這個例外恰恰是在錯誤的呼叫中被拋出的。當我「調整」代碼以避免先前的異常時,在錯誤的調用中拋出異常; VB程序只是退出沒有錯誤!看來無論代碼出現問題,它都會重用最後處理的異常。這意味着如果你的代碼以前有一個「索引越界」或「除以0」的錯誤,這就是你(可能)看到代碼barfs時(因爲沒有64位dll)。所以這個問題可以僞裝成一大堆錯誤!