连接到MS Access DB无法执行多个查询

时间:2013-04-15 01:01:02

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

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

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

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")
%>

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

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

以下是我的系统详情:

  • Windows 7 Pro 64位(虽然根据我在网上发现的内容设置了32位连接)
  • IIS 7.5

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

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

一些事情:

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

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

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

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

有关上述各点的更多信息,请参阅: