Access數(shù)據(jù)庫提示OleDbException (0x80004005): 操作必須使用一個可更新的查詢
更新時間:2011年06月02日 22:09:37 作者:
使用Access當(dāng)數(shù)據(jù)庫時,這個問題郁悶了我好幾天啊![OleDbException (0x80004005): 操作必須使用一個可更新的查詢。]
說明: 執(zhí)行當(dāng)前 Web 請求期間,出現(xiàn)未處理的異常。請檢查堆棧跟蹤信息,以了解有關(guān)該錯誤以及代碼中導(dǎo)致錯誤的出處的詳細(xì)信息。
異常詳細(xì)信息: System.Data.OleDb.OleDbException: 無法從指定的數(shù)據(jù)表中刪除。
源錯誤:
行 37: comm.CommandText = sqlstr;
行 38: //comm.Prepare();
行 39: cout = comm.ExecuteNonQuery();
行 40:
行 41: conn.Close();
源文件: d:\SOVO驗(yàn)收代碼\Base\App_Code\JetAccess.cs 行: 39
[OleDbException (0x80004005): 無法從指定的數(shù)據(jù)表中刪除。]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +267
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +192
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +48
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +106
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +108
JetAccess.Execute(OleDbParameter[] parameters, String sqlstr) in d:\SOVO驗(yàn)收代碼\Base\App_Code\JetAccess.cs:39
NewsData.DeleteNews(Int32 id) in d:\SOVO驗(yàn)收代碼\Base\App_Code\NewsData.cs:29
_Default.GridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e) in d:\SOVO驗(yàn)收代碼\Base\System\Default.aspx.cs:46
System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e) +133
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +604
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1155
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +199
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
解決方法如下:
在數(shù)據(jù)文件*.mdb上右鍵打開屬性對話框,在'安全'標(biāo)簽下需要添加IUSR_XXX(XXX為你的機(jī)器名),也就是添加Internet Guest Account帳戶,再將此帳戶的權(quán)限設(shè)為可讀,可寫.(原來這么簡單就解決了的問題,我靠:) )
如果在右鍵屬性對話框內(nèi)找不到'安全'標(biāo)簽,需要將文件夾選項(xiàng)下的視圖內(nèi)的'使用簡單文件共享(默認(rèn))'的勾去掉.
原因:
有幾個主要的錯誤原因:
這個錯誤發(fā)生在當(dāng)你的程序試圖執(zhí)行更新數(shù)據(jù)庫或其它類似操作時。這是因?yàn)?
ADO由于以下的幾個原因而不能夠?qū)憯?shù)據(jù)庫造成的。
1。最普遍的原因是匿名用戶帳號(IUSR_MACHINE)對該數(shù)據(jù)庫文件沒有寫權(quán)限。
要解決這個問題,在管理器中調(diào)整數(shù)據(jù)庫文件的屬性,讓匿名用戶有正確的權(quán)限。
當(dāng)使用ACCESS數(shù)據(jù)庫時,不僅要給文件寫的權(quán)限,還要給該目錄寫 的權(quán)限,因?yàn)?
Jet需要在該目錄建立一個.ldb文件。
2。第二個原因是數(shù)據(jù)庫沒有使用正確的模式打開。應(yīng)該使用下面的方法打開。
SQL = "UPDATE Products Set UnitPrice = 2;"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 ''3 = adModeReadWrite
Conn.Open "myDSN"
Conn.Execute(SQL)
Conn.Close
注意默認(rèn)的Mode是設(shè)置0(adModeUnknown),它是允許更新的。
3。還有可能是在ODBC管理器中將該DSN的只讀選項(xiàng)選中。
4。你是在同時更新兩個表中的字段,也會出現(xiàn)這個錯誤信息,解決辦法是分開來更新
這兩個表中各自字段。
5。當(dāng)你使用了一個從低版本中(如ACCESS2.0,ACCESS7.0)載入到高版本(ACCESS 2000)
中的查詢時,在執(zhí)行這個查詢是會出現(xiàn)該錯誤。
異常詳細(xì)信息: System.Data.OleDb.OleDbException: 無法從指定的數(shù)據(jù)表中刪除。
源錯誤:
行 37: comm.CommandText = sqlstr;
行 38: //comm.Prepare();
行 39: cout = comm.ExecuteNonQuery();
行 40:
行 41: conn.Close();
源文件: d:\SOVO驗(yàn)收代碼\Base\App_Code\JetAccess.cs 行: 39
[OleDbException (0x80004005): 無法從指定的數(shù)據(jù)表中刪除。]
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult) +267
System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) +192
System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult) +48
System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method) +106
System.Data.OleDb.OleDbCommand.ExecuteNonQuery() +108
JetAccess.Execute(OleDbParameter[] parameters, String sqlstr) in d:\SOVO驗(yàn)收代碼\Base\App_Code\JetAccess.cs:39
NewsData.DeleteNews(Int32 id) in d:\SOVO驗(yàn)收代碼\Base\App_Code\NewsData.cs:29
_Default.GridView1_RowDeleting(Object sender, GridViewDeleteEventArgs e) in d:\SOVO驗(yàn)收代碼\Base\System\Default.aspx.cs:46
System.Web.UI.WebControls.GridView.OnRowDeleting(GridViewDeleteEventArgs e) +133
System.Web.UI.WebControls.GridView.HandleDelete(GridViewRow row, Int32 rowIndex) +604
System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +1155
System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +199
System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
解決方法如下:
在數(shù)據(jù)文件*.mdb上右鍵打開屬性對話框,在'安全'標(biāo)簽下需要添加IUSR_XXX(XXX為你的機(jī)器名),也就是添加Internet Guest Account帳戶,再將此帳戶的權(quán)限設(shè)為可讀,可寫.(原來這么簡單就解決了的問題,我靠:) )
如果在右鍵屬性對話框內(nèi)找不到'安全'標(biāo)簽,需要將文件夾選項(xiàng)下的視圖內(nèi)的'使用簡單文件共享(默認(rèn))'的勾去掉.
原因:
有幾個主要的錯誤原因:
這個錯誤發(fā)生在當(dāng)你的程序試圖執(zhí)行更新數(shù)據(jù)庫或其它類似操作時。這是因?yàn)?
ADO由于以下的幾個原因而不能夠?qū)憯?shù)據(jù)庫造成的。
1。最普遍的原因是匿名用戶帳號(IUSR_MACHINE)對該數(shù)據(jù)庫文件沒有寫權(quán)限。
要解決這個問題,在管理器中調(diào)整數(shù)據(jù)庫文件的屬性,讓匿名用戶有正確的權(quán)限。
當(dāng)使用ACCESS數(shù)據(jù)庫時,不僅要給文件寫的權(quán)限,還要給該目錄寫 的權(quán)限,因?yàn)?
Jet需要在該目錄建立一個.ldb文件。
2。第二個原因是數(shù)據(jù)庫沒有使用正確的模式打開。應(yīng)該使用下面的方法打開。
SQL = "UPDATE Products Set UnitPrice = 2;"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Mode = 3 ''3 = adModeReadWrite
Conn.Open "myDSN"
Conn.Execute(SQL)
Conn.Close
注意默認(rèn)的Mode是設(shè)置0(adModeUnknown),它是允許更新的。
3。還有可能是在ODBC管理器中將該DSN的只讀選項(xiàng)選中。
4。你是在同時更新兩個表中的字段,也會出現(xiàn)這個錯誤信息,解決辦法是分開來更新
這兩個表中各自字段。
5。當(dāng)你使用了一個從低版本中(如ACCESS2.0,ACCESS7.0)載入到高版本(ACCESS 2000)
中的查詢時,在執(zhí)行這個查詢是會出現(xiàn)該錯誤。
相關(guān)文章
Access出現(xiàn)"所有記錄中均未找到搜索關(guān)鍵字"的錯誤解決
asp寫了那么長時間都沒有發(fā)現(xiàn),今天居然讓我碰到了。 網(wǎng)頁頁面是一個標(biāo)題和信息內(nèi)容(備注型)的修改提交,第一次提交修改沒有問題,第二次提交修改就出現(xiàn)錯誤2008-11-11中文Access2000速成教程--1.5 使用已有的數(shù)據(jù)自動建新表
中文Access2000速成教程--1.5 使用已有的數(shù)據(jù)自動建新表...2006-11-11Access數(shù)據(jù)庫提示OleDbException (0x80004005): 操作必須使用一個可更新的查詢
使用Access當(dāng)數(shù)據(jù)庫時,這個問題郁悶了我好幾天啊![OleDbException (0x80004005): 操作必須使用一個可更新的查詢。]2011-06-06Access創(chuàng)建一個簡單MIS管理系統(tǒng)
所謂MIS管理系統(tǒng),是一個由人、計算機(jī)及其他外圍設(shè)備等組成的能進(jìn)行信息的收集、傳遞、存貯、加工、維護(hù)和使用的系統(tǒng)。MIS管理系統(tǒng)是一種新興的技術(shù),那么下文中就給大家介紹Access這個有歷史的數(shù)據(jù)庫系統(tǒng)如何創(chuàng)建一個簡單的MIS管理系統(tǒng)。2015-09-09獲取ACCESS2000數(shù)據(jù)庫中所有表的名稱
獲取ACCESS2000數(shù)據(jù)庫中所有表的名稱...2006-11-11access不能打開注冊表關(guān)鍵字錯誤處理方法(80004005錯誤)
本文介紹訪問access提示不能打開注冊表關(guān)鍵字,access 80004005 錯誤的處理方法2013-11-11使用準(zhǔn)則進(jìn)行條件查詢--1.5.常用的準(zhǔn)則表達(dá)式
使用準(zhǔn)則進(jìn)行條件查詢--1.5.常用的準(zhǔn)則表達(dá)式...2006-11-11