文章詳情頁(yè)
Access數(shù)據(jù)庫(kù)提示OleDbException (0x80004005): 操作必須使用一個(gè)可更新的查詢(xún)
瀏覽:127日期:2023-03-18 16:41:43
說(shuō)明: 執(zhí)行當(dāng)前 Web 請(qǐng)求期間,出現(xiàn)未處理的異常。請(qǐng)檢查堆棧跟蹤信息,以了解有關(guān)該錯(cuò)誤以及代碼中導(dǎo)致錯(cuò)誤的出處的詳細(xì)信息。
異常詳細(xì)信息: System.Data.OleDb.OleDbException: 無(wú)法從指定的數(shù)據(jù)表中刪除。
源錯(cuò)誤:
行 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): 無(wú)法從指定的數(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上右鍵打開(kāi)屬性對(duì)話(huà)框,在"安全"標(biāo)簽下需要添加IUSR_XXX(XXX為你的機(jī)器名),也就是添加Internet Guest Account帳戶(hù),再將此帳戶(hù)的權(quán)限設(shè)為可讀,可寫(xiě).(原來(lái)這么簡(jiǎn)單就解決了的問(wèn)題,我靠:) )
如果在右鍵屬性對(duì)話(huà)框內(nèi)找不到"安全"標(biāo)簽,需要將文件夾選項(xiàng)下的視圖內(nèi)的"使用簡(jiǎn)單文件共享(默認(rèn))"的勾去掉.
原因:
有幾個(gè)主要的錯(cuò)誤原因:
這個(gè)錯(cuò)誤發(fā)生在當(dāng)你的程序試圖執(zhí)行更新數(shù)據(jù)庫(kù)或其它類(lèi)似操作時(shí)。這是因?yàn)?
ADO由于以下的幾個(gè)原因而不能夠?qū)憯?shù)據(jù)庫(kù)造成的。
1。最普遍的原因是匿名用戶(hù)帳號(hào)(IUSR_MACHINE)對(duì)該數(shù)據(jù)庫(kù)文件沒(méi)有寫(xiě)權(quán)限。
要解決這個(gè)問(wèn)題,在管理器中調(diào)整數(shù)據(jù)庫(kù)文件的屬性,讓匿名用戶(hù)有正確的權(quán)限。
當(dāng)使用ACCESS數(shù)據(jù)庫(kù)時(shí),不僅要給文件寫(xiě)的權(quán)限,還要給該目錄寫(xiě) 的權(quán)限,因?yàn)?
Jet需要在該目錄建立一個(gè).ldb文件。
2。第二個(gè)原因是數(shù)據(jù)庫(kù)沒(méi)有使用正確的模式打開(kāi)。應(yīng)該使用下面的方法打開(kāi)。
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。你是在同時(shí)更新兩個(gè)表中的字段,也會(huì)出現(xiàn)這個(gè)錯(cuò)誤信息,解決辦法是分開(kāi)來(lái)更新
這兩個(gè)表中各自字段。
5。當(dāng)你使用了一個(gè)從低版本中(如ACCESS2.0,ACCESS7.0)載入到高版本(ACCESS 2000)
中的查詢(xún)時(shí),在執(zhí)行這個(gè)查詢(xún)是會(huì)出現(xiàn)該錯(cuò)誤。
異常詳細(xì)信息: System.Data.OleDb.OleDbException: 無(wú)法從指定的數(shù)據(jù)表中刪除。
源錯(cuò)誤:
行 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): 無(wú)法從指定的數(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上右鍵打開(kāi)屬性對(duì)話(huà)框,在"安全"標(biāo)簽下需要添加IUSR_XXX(XXX為你的機(jī)器名),也就是添加Internet Guest Account帳戶(hù),再將此帳戶(hù)的權(quán)限設(shè)為可讀,可寫(xiě).(原來(lái)這么簡(jiǎn)單就解決了的問(wèn)題,我靠:) )
如果在右鍵屬性對(duì)話(huà)框內(nèi)找不到"安全"標(biāo)簽,需要將文件夾選項(xiàng)下的視圖內(nèi)的"使用簡(jiǎn)單文件共享(默認(rèn))"的勾去掉.
原因:
有幾個(gè)主要的錯(cuò)誤原因:
這個(gè)錯(cuò)誤發(fā)生在當(dāng)你的程序試圖執(zhí)行更新數(shù)據(jù)庫(kù)或其它類(lèi)似操作時(shí)。這是因?yàn)?
ADO由于以下的幾個(gè)原因而不能夠?qū)憯?shù)據(jù)庫(kù)造成的。
1。最普遍的原因是匿名用戶(hù)帳號(hào)(IUSR_MACHINE)對(duì)該數(shù)據(jù)庫(kù)文件沒(méi)有寫(xiě)權(quán)限。
要解決這個(gè)問(wèn)題,在管理器中調(diào)整數(shù)據(jù)庫(kù)文件的屬性,讓匿名用戶(hù)有正確的權(quán)限。
當(dāng)使用ACCESS數(shù)據(jù)庫(kù)時(shí),不僅要給文件寫(xiě)的權(quán)限,還要給該目錄寫(xiě) 的權(quán)限,因?yàn)?
Jet需要在該目錄建立一個(gè).ldb文件。
2。第二個(gè)原因是數(shù)據(jù)庫(kù)沒(méi)有使用正確的模式打開(kāi)。應(yīng)該使用下面的方法打開(kāi)。
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。你是在同時(shí)更新兩個(gè)表中的字段,也會(huì)出現(xiàn)這個(gè)錯(cuò)誤信息,解決辦法是分開(kāi)來(lái)更新
這兩個(gè)表中各自字段。
5。當(dāng)你使用了一個(gè)從低版本中(如ACCESS2.0,ACCESS7.0)載入到高版本(ACCESS 2000)
中的查詢(xún)時(shí),在執(zhí)行這個(gè)查詢(xún)是會(huì)出現(xiàn)該錯(cuò)誤。
標(biāo)簽:
Access
相關(guān)文章:
1. Access數(shù)據(jù)庫(kù)安全的幾個(gè)問(wèn)題2. 數(shù)據(jù)庫(kù)Oracle9i的企業(yè)管理器簡(jiǎn)介3. Access中批量替換數(shù)據(jù)庫(kù)內(nèi)容的兩種方法4. Mysql入門(mén)系列:需要避免的MYSQL客戶(hù)機(jī)程序設(shè)計(jì)錯(cuò)誤5. 如何實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)的備份與恢復(fù)6. 巧用SQL語(yǔ)言在ACCESS數(shù)據(jù)庫(kù)中批量替換內(nèi)容7. 簡(jiǎn)單了解mysql語(yǔ)句書(shū)寫(xiě)和執(zhí)行順序8. 學(xué)好Oracle的六條總結(jié)9. mysql like語(yǔ)句問(wèn)題10. Mysql故障排除:Starting MySQL. ERROR! Manager of pid-file quit without updating file
排行榜
