在Windows 7 MS Visual Studio中访问数据库的问题

时间:2011-04-30 21:31:32

标签: vb.net visual-studio-2008

我开发了一个小应用程序,它使用VB.net访问我计算机上的MS访问数据库。我在windows xp 32位上开发了这个程序。目前我正在使用Windows 7 64位,程序根本无法运行。当我尝试对数据库执行任何操作时,我得到一个空引用异常。我已经缩小了这一点,我想到了数据库提供商。我使用Provider=Microsoft.Jet.OLEDB.4.0;并尝试使用Provider=Microsoft.ACE.OLEDB.12.0;。似乎都没有用。我的数据库的路径是100%正确的。这是我得到的错误:

空引用异常未处理。 对象引用未设置为对象的实例。

就像我说程序在windows xp机器上运行正常。如果它有助于访问数据库文件扩展名为mdb。

3 个答案:

答案 0 :(得分:1)

对于Access数据库文件的64位访问不存在DLL,因此您必须转到项目属性并在“编译”选项卡上转到“高级编译选项”并将“目标CPU”设置为“x86”我希望这有助于

答案 1 :(得分:1)

除了写入SQL 2008 DB之外,我遇到了完全相同的问题。 VS2008,VB.net代码用框架3.5,Windows 7 64位。代码在XP上运行良好。

John R的回答提供了正确的解决方案:更改项目的高级编译选项,将“目标CPU”设置为“x86”。

此问题可能比最初描述的症状更多。我会概括他们:

访问ACCESS不是唯一的问题;它也发生在SQL(至少是MS SQL 2008)上。

某些数据库调用可以并且可以正常工作。好像这些调用会让你失败,但失败的地方会在你的程序中随机发生。

我看到的失败点是在子程序调用期间。 (只是对我在VB中创建的子程序的正常调用。)在调用周围放置一个try-catch块不会捕获错误。

这是最奇怪的部分:在错误的子程序调用之前,代码有一个HANDLED异常。具有讽刺意味的是,例外情况恰恰是错误调用的内容。当我“调整”代码以避免先前的异常时,错误的调用没有抛出任何异常; VB程序JUST QUIT WITH NO ERROR!似乎无论代码有什么问题,它都会重用最后处理的异常。这意味着如果你的代码以前有一个“索引越界”或“除以0”错误,这就是你(可能)在代码barfs时看到的(因为没有64位dll)。所以这个问题可以伪装成一堆错误!

答案 2 :(得分:0)

听起来不像提供商错误,因为Jet部件很好。确保您的数据源路径正确无误。如果你在VS上的Projects文件夹中有它并且正在使用完整路径,则可能需要更改它,因为文件系统是如何使用用户与文档和设置一起设置的。