1

很长一段时间以来,我一直在新机器上设置我的第一个本地托管网站,老实说,我对现在配置的所有手动设置并不是很熟悉。我最后一次设置是在 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]
  • 酒店名称 [文本 (255)]

这是我的系统详细信息:

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

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

任何帮助表示赞赏。我相信这是我必须完全启动和运行的最后一个障碍。

提前致谢。

4

1 回答 1

0

一些东西:

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

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

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

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

有关上述要点的更多信息,请参见:

于 2013-04-15T01:44:38.623 回答