【问题标题】:Connection to MSAccess DB unable to perform more than one query与 MS Access DB 的连接无法执行多个查询
【发布时间】:2013-04-15 01:01:02
【问题描述】:

很长一段时间以来,我一直在新机器上设置我的第一个本地托管网站,老实说,我对现在配置的所有手动设置都不是很熟悉。我最后一次设置是在 Windows XP 机器上,当我启用 IIS 时它似乎“正常工作”。这次不是这样。

我最近遇到的问题是连接到 MSAccess 数据库。我有一个非常基本的页面,其中包含一个输入的表单。我检查数据库以确保它尚未包含该值,如果没有,则将该值写入数据库。我收到以下错误:

Provider error '80004005'
Unspecified error
/trips/admin_add_hotel.asp, line 22

我在网上进行了研究,一切似乎都表明这是一个权限问题。但是,我可以删除代码的第二部分(写作),页面将返回正常。如果我尝试再次运行页面或刷新,我会收到错误消息。这对我来说说用户具有读取权限。现在,我可以稍等片刻,删除代码的第一部分,然后写入数据库,它会正常工作。同样,对我来说,这意味着用户具有写访问权限。但是,如果我再次尝试运行它...同样的错误。

这是 ASP 代码:

<!--#include file="includefile.asp"-->
<%
if Request("action") = "submit" then
    'make sure hotel name is filled in
    if Request("fhotel") <> "" then
        fhotel = Request("fhotel")

        'make sure hotel doesn't already exist in DB
        sql = "SELECT hotel_id FROM hotels WHERE hotel_name = '" & Replace(fhotel, "'", "''") & "'"
        RS.Open sql, ConnectString
            if NOT RS.EOF then
                Session("msg") = "Hotel already exists"
            End if
        RS.Close

        'add hotel to DB
        if Session("msg") = "" then
            sql = "INSERT INTO hotels (hotel_name) VALUES ('" & Replace(fhotel, "'", "''") & "')"

            Conn.Open ConnectString
            Conn.Execute sql
            Conn.Close

            Session("msg") = "Hotel added successfully"
            fhotel = ""
        End if
    Else
        Session("msg") = "Hotel left blank"
    End if

    Set RS = Nothing
    Set Conn = Nothing

End if
%>

我的包含文件是:

<%  
ConnectString = "DSN=ConnectionDSN; Uid=username; Pwd=password"

Set RS = Server.CreateObject("ADODB.Recordset")
Set Conn = Server.CreateObject("ADODB.Connection")
%>

我的数据库有 1 个包含两列的表:

  • hotel_id [AUTONUMBER]
  • hotel_name [TEXT (255)]

这是我的系统详细信息:

  • Windows 7 Pro 64 位(尽管根据我在网上找到的内容已为 32 位设置了连接)
  • IIS 7.5

为了确保不是权限问题,我暂时允许“所有人”用户完全访问该文件夹。

感谢任何帮助。我相信这是我完全启动和运行的最后一道障碍。

提前致谢。

【问题讨论】:

  • 您必须有权在数据库所在的文件夹中创建锁定文件 *.ldb。可能您在该文件夹中没有创建文件权限。

标签: ms-access iis windows-7 asp-classic odbc


【解决方案1】:

一些事情:

  • 32 位与 64 位:绝对确保您的应用程序明确设置为 x86,而不是 AnyCPU。此外,如果您使用的是较新的 .accdb,请确保您已安装 Access 数据库引擎驱动程序。

  • 权限:正如 Dan Matheus 所说,确保运行 IIS 的进程对该文件夹具有写入权限。将其设置为 Everyone 可能还不够,请确保您的 Web 应用程序实际上可以在该文件夹中创建一个文件(在您的代码中测试此假设)。

  • 确保您的 Access 文件的连接字符串明确提及共享访问,而不是独占访问,否则,如果不同的进程具有

  • 始终保持与数据库的连接打开,以避免快速创建/删除锁定文件时出现问题。
    Jet/ACE 数据库驱动程序需要在您每次访问文件时创建锁定文件(如果它处于共享模式)。当您的应用快速访问/释放数据库文件并且过于频繁地创建/删除锁定文件时,就会出现问题。
    首先它会大大降低你的性能,其次你会得到奇怪的错误。
    只需保持与数据库的连接打开,并在您的应用关闭时将其关闭。

有关以上几点的更多信息,请参阅:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多