AccessDataSource 控件报告无法识别的数据库
Posted
技术标签:
【中文标题】AccessDataSource 控件报告无法识别的数据库【英文标题】:AccessDataSource control reports unrecognizable database 【发布时间】:2013-05-02 14:14:57 【问题描述】:我正在为 web 运行 Visual Studio 2012 Express,并在页面上添加了一个 asp 下拉框。我尝试使用 asp:AccessDataSource 对象从 access 2007 数据库加载源。巫师完成得很好。当我在网络上运行该页面时,我收到一条错误消息,告诉我数据库的格式无法识别。我用谷歌搜索了这个问题,发现 Visual Studio 不知道使用提供程序 Microsoft.ace.oledb.12.0 并且我需要修改连接字符串。
由于我不是为这个页面编写代码,并且依靠VS的可视化界面来生成代码,我如何找到代码来修改它?还是我只是自己写代码,不依赖VS帮我做?
【问题讨论】:
【参考方案1】:您可以使用页面here 上的示例代码来显示您的AccessDataSource 正在使用的连接字符串。验证连接字符串是否包含
Provider=Microsoft.ACE.OLEDB.12.0;
并且Data source
的路径是有效的。
FWIW,我刚刚尝试使用 Access 2010 数据库在 Visual Web Developer 2010 Express 下重新创建您的问题,它对我来说效果很好。我也找不到任何证据表明 AccessDataSource 的连接字符串实际上是在 Web.config
或其他地方的任何地方“写下”的。
【讨论】:
我从 Visual Web Developer 2010 Express 开始,无法理解 access 2007 DB 的格式。这就是为什么我升级到 2012 仍然不行。奇怪的是,VS 可以在数据源向导中显示预期的输出,但在 web 中它抱怨 DB 格式。我什至将数据库从 access 2010 降级到 2007,但没有帮助。 @user1617356 这很奇怪,因为我不需要做任何特别的事情来使我的测试用例工作,但是 (1) 我的测试盒是 32 位 Windows Server 2003,(2) 它有 Office 2010 和 VWD Express 2010。它可能是 32 位与 64 位的问题,但这只是猜测。您的连接字符串在运行时看起来有效吗? 好的。我最近升级到了 win 7 64 位机器。我有 office 2007 和 VD 2012。在前几页我直接编写了代码并且能够让一切正常工作。然后我想在另一个表单上利用 VS 的 ASP 对象,这样我就可以在不编写 javascript 的情况下尝试生成输入验证。这就是我注意到问题的地方。最糟糕的是,我所要处理的只是隐藏任何代码的 ASP 对象。也许这是一个 64 位的问题,但我倾向于怀疑它,因为我会看到更多关于此的帖子。 64 位操作系统已经问世几年了。 我刚刚重读了我之前的帖子,我更加困惑。 VS 中的向导要求我选择 mdb 文件,但我的数据库是 accdb。很酷的是 VS 可以在保存 asp:datasource 对象之前显示输出。但是当我在 IE 中运行该页面时,我收到消息:“无法识别的数据库格式 'C:\Users\itweb\Documents\Visual Studio 2012\Projects\Notitiae_Project\Notitiae_Project\App_Data\notitiae.accdb'” @user1617356 实际上有很多关于 32 位和 64 位版本的 Access 数据库引擎 (ACE) 的帖子(这里和其他地方)。例如,假设您拥有 32 位版本的 Visual Web Developer,并且 AccessDataSource 安装向导使用 32 位 ACE 驱动程序,并且它们可以工作。然后,当您在 IIS 下运行该页面时,ASP.NET 可能会在没有 64 位驱动程序可用的 64 位“世界”中运行。 (64 位 ACE 组件不能安装在已安装 32 位 Office 应用程序的计算机上。)这只是一个示例。【参考方案2】:根据this blog entry:
AccessDataSource 控件
我考虑得越多,这种控制在我看来就越没有意义。唯一的好处是它有效。但是,它仅适用于 .mdb 格式,因为它在内部调用 Jet 提供程序,并且无法更改。您不能将它与受密码保护的文件一起使用,因为它会自动从您提供给 DataFile 属性的 .mdb 文件的位置生成连接字符串
因此,我要么必须使用 .mdb 文件,要么手动生成代码。我投票支持手动创建。
【讨论】:
我同意 AccessDataSource 控件可能不适合您,因为您需要连接到启用了用户级安全性的.mdb
文件。但是,正如我在回答中所说,它可以使用.accdb
文件;我自己做的。以上是关于AccessDataSource 控件报告无法识别的数据库的主要内容,如果未能解决你的问题,请参考以下文章