我在很长一段时间内在新机器上设置我的第一个本地托管网站,说实话,我不熟悉现在配置的所有手动设置。我的最后一次设置是在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")
%>
我的数据库有一个包含两列的表:
以下是我的系统详情:
为了确保它不是权限问题,我暂时允许“Everyone”用户完全访问该文件夹。
感谢任何帮助。我相信这是我必须完全启动并运行的最后一道障碍。
提前致谢。
答案 0 :(得分:0)
一些事情:
32位与64位:确保您的应用程序明确设置为x86,而不是AnyCPU。如果您使用较新的.accdb
,还要确保安装了Access数据库引擎驱动程序。
权限:正如Dan Matheus所说,请确保IIS运行的进程具有对该文件夹的写入权限。将其设置为 Everyone 可能还不够,请确保您的Web应用程序可以在该文件夹中实际创建文件(在您的代码中测试此假设)。
确保Access文件的连接字符串明确提及共享访问,而不是独占访问,否则,如果不同进程具有
始终保持与数据库的连接,以避免快速创建/删除锁定文件时出现问题。
Jet / ACE数据库驱动程序需要在每次访问文件时创建锁定文件(如果它处于共享模式)。当您的应用程序快速访问/释放数据库文件并且过于频繁地创建/删除锁定文件时,将出现问题
首先它会大大减慢你的表现,其次你会得到奇怪的错误
只需保持对数据库的连接打开,并在应用程序关闭时关闭它。
有关上述各点的更多信息,请参阅: