2013-04-15 99 views
1

我在很长一段时间内在新机器上设置了我的第一个本地托管网站,说实话,我并不十分熟悉现在配置的所有手动设置。我最后一次设置是在Windows XP中,当我启用IIS时,它似乎“正常工作”。现在不是这样。与MSAccess数据库的连接无法执行多个查询

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

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

我DB具有1个表有两列:

  • HOTEL_ID [自动编号]
  • hotel_name [TEXT(255)]

这里是我的系统的详细信息:

  • 的Windows 7专业版64位(虽然基于连接已经建立了32位在什么我在网上找到)
  • IIS 7.5

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

任何帮助表示赞赏。我相信这是我必须完成并运行的最后一道障碍。

在此先感谢。

+1

你必须有权限创建数据库驻留在文件夹中锁定文件* .LDB 。可能你没有该文件夹的创建文件权限。 –

回答

0

有几件事情:

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

  • 权限:正如Dan Matheus所说,让sur运行IIS的过程对该文件夹写入权限。这可能是不够的,你把它设置为大家,确保你的网络应用程序可以在该文件夹中创建一个文件(在你的代码中测试这个假设)。

  • 确保用于访问文件的连接字符串明确提到的共享访问,而不是排他的访问,否则,如果不同进程具有

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

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