我有一个持续失败的Microsoft Access数据库的更新查询。查询在从我的数据库中执行时有效,但在从我的.aspx页面的CodeFile执行时失败。
我确保:
有没有人对我可能缺少的东西有任何建议? 谢谢!!
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(Object& executeResult)+189
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,Object& executeResult)+58
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior,String method)+162
System.Data.OleDb.OleDbCommand.ExecuteNonQuery()+ 107
C:\ Dustin \ FAQDB.aspx.vb中的jsDB.Page_Load(Object sender,EventArgs e):29
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,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
答案 0 :(得分:0)
此帮助页面解决了您收到的错误:
https://support.microsoft.com/en-us/kb/175168
看起来你要么没有以正确的模式打开连接(在这种情况下是模式3),要么是"表"您正在更新具有阻止您更新它的条件。我敢打赌,将模式更改为3可以解决问题。
答案 1 :(得分:0)
这里有一些错误可能会帮助您解决此问题以及将来的其他问题。
IsNumeric(cint(cleanID))
- CInt()上的IsNumeric()无关紧要。 CInt将返回System.Int32或错误。你应该只做IsNumeric(),如果你想知道它是否是Int32,那么就在它上面做一个Int32.TryParse()。作为旁注。 MS Access处理多个连接非常糟糕,因为错误导致它们处于打开状态会导致巨大的问题。确保所有数据库调用都有正确的错误处理,如果你可以将它们放在USING块中,那就更好了。
答案 2 :(得分:0)
向@Steve致敬,感谢他们为此提供了如此大的帮助。
我这里有几个问题。虽然我确信有很多问题可能会导致我遇到的错误,但这就是为我解决的问题:
截至目前,'Microsoft.ACE.OLEDB.12.0'提供程序仅适用于32位。更改我的应用程序池以允许32位应用程序解决了这个问题。
感谢大家的投入!