【发布时间】:2016-02-14 04:57:04
【问题描述】:
上下文:
我有一个不断失败的 Microsoft Access 数据库的更新查询。该查询在我的数据库中执行时有效,但在我的 .aspx 页面的代码文件中执行时失败。
我已确保:
- 我的 App_Data 文件夹具有写入权限(通过 IUSR)
- 我的数据库不是“只读”
- 我的查询语法正确
有人对我可能遗漏的内容有任何建议吗? 谢谢!!
代码:
Imports System.Data
Imports System.Data.SqlClient
Imports System.Web.UI.WebControls
Imports System.Data.OleDb
Partial Class jsDB
Inherits System.Web.UI.Page
Private con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = C:\Dustin\App_Data\FAQ.accdb")
Public Sub Page_Load(sender as object, e as System.EventArgs)
If request.QueryString("type") = "helpful" Then
Dim cleanID as string
cleanID = request.querystring("id")
If IsNumeric(cint(cleanID)) Then 'Make sure QueryString hasn't been tampered with
Dim sql as string
sql = "UPDATE QUESTION SET helpful=helpful+1 WHERE questionID=" & cleanID
Dim cmd As New OleDbCommand(sql, con)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
Response.write("Success")
else
Response.write("Invalid ID")
end if
else
Response.write("No recognized type")
end If
End Sub
End Class
错误:
“/”应用程序中的服务器错误。
操作必须使用可更新的查询。 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.OleDb.OleDbException:操作必须使用可更新查询。
来源错误:
第 27 行:
第 28 行:con.Open()
第 29 行:cmd.ExecuteNonQuery()
第 30 行:con.Close()
第 31 行:
源文件:C:\Dustin\FAQDB.aspx.vb 行:29
堆栈跟踪:
[OleDbException (0x80004005):操作必须使用可更新的查询。]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr) +1102900
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +247
System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象和执行结果)+189
System.Data.OleDb.OleDbCommand.ExecuteCommand(命令行为行为,对象和执行结果)+58
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)+162
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +107
C:\Dustin\FAQDB.aspx.vb:29 中的 jsDB.Page_Load(Object sender, EventArgs e)
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(对象发送者,EventArgs e)+51
System.Web.UI.Control.OnLoad(EventArgs e) +92
System.Web.UI.Control.LoadRecursive() +54
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772
【问题讨论】:
-
Environement.UserName 在执行查询之前报告的用户是什么? codeproject.com/Questions/442585/…
-
我不能权威地说错误消息是否意味着同样的事情(这是一个模糊的消息),但这可能会有所帮助:stackoverflow.com/questions/24798509/…
-
@Steve Environment.UserName = DefaultAppPool。这是红旗吗?我不熟悉 IIS 的用户设置,但如果最有可能是这个原因,我肯定可以进入这个兔子洞。
标签: sql asp.net vb.net ms-access