文章編號: 316675 - 上次校閱: 2007年5月13日 - 版次: 6.5

當您嘗試從 ASP.NET 背景工作處理序連線至 Access 資料庫時,可能就會發生未處理的例外狀況

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
這份文件參照到下列的 Microsoft.NET Framework 類別庫的命名空間:
  • System.Data.OleDb

在此頁中

全部展開 | 全部摺疊

徵狀

在下列情況下,就可能發生未處理的例外狀況:
  • ASP.NET 背景工作處理序 (Aspnet_wp.exe) 會在預設的 ASPNET 帳戶下執行。
    -以及-
  • 您未啟用該應用程式上的模擬。

    -以及-
  • 您嘗試連線到或寫入一個 Access 資料庫。
在這些情況下可能會收到下列的例外狀況的其中一個:
Microsoft Jet 資料庫引擎無法開啟檔案 'C:\Nwind.mdb'。只由另一位使用者已經開啟,或者您需要檢視其資料的權限。
作業必須使用可更新的查詢。

發生的原因

因為安全性考量的 ASP.NET 背景工作處理序會在預設的 ASPNET 帳戶下執行。如果您不啟用應用程式的模擬的所有執行該應用程式要求的執行緒會處理序帳戶下執行。

之所以發生這個問題,是因為 [ASPNET 帳戶沒有足夠的權限可連線到或寫入至 Access 資料庫。

解決方案

如果要解決這個問題而定,使用 [下列的其中一個方法]:
  • 設定 ASP.NET 背景工作處理序在 Machine.config <processmodel>一節中在 SYSTEM 帳戶下執行檔案。
  • 基於安全性考量 Microsoft 建議您啟用模擬,ASP.NET 應用程式上。這個方法的效果如果模擬的使用者沒有在電腦與您正在存取的資料庫的必要權限。
  • 授與讀取和寫入權限 」 Everyone 」 在資料庫和資料庫資料夾群組。這個方法並不安全,因此,Microsoft 建議您不要這個方法。

狀況說明

這種行為是經過設計規劃的。

其他相關資訊

需要無限制的使用者、 全職支援和 ACID 交易時 Microsoft 強烈建議您使用 Microsoft SQL Server 使用 Microsoft 「 網際網路資訊服務 (IIS)。雖然 Microsoft 動態伺服器網頁 (ASP) 適用於任何 OLE DB 相容或 ODBC 相容資料庫,IIS 已經過廣泛測試。IIS 被設計來與 Microsoft SQL Server 上高交易流量,且可能會發生在網際網路案例的無限制使用者。

附註ACID 」 是四個屬性的交易處理系統縮略字: 不可部分完成性、 一致性、 隔離、 耐用性。

ASP 支援使用 Microsoft Jet 資料庫引擎,作為有效的資料來源。不過,Access 的 Microsoft ODBC 驅動程式和 Microsoft OLE DB 提供者的 Jet 是不被要使用與高壓力、 高並行處理、 全職的伺服器應用程式 (例如 Web 應用程式、 商務應用程式、 交易式應用程式、 傳訊伺服器,等等)。

重現這個問題的步驟

  1. 在 Microsoft Visual C#.NET 中建立新的 ASP.NET Web 應用程式專案時。
  2. 將下列程式碼新增到 「 宣告 」 區段會出現在 [程式碼] 視窗頂端的您 Web] 表單的:
    using System.Data.OleDb;					
  3. 將下列程式碼加入至 Page_Load 事件:
        String myConn  ="Provider=Microsoft.JET.OLEDB.4.0;Data Source=C:\\Nwind.mdb;";
        String myQuery  = "Insert into Customers(CustomerID,CompanyName) Values ('aaaaa', 'aaaaa')";
    
        OleDbConnection cn = new OleDbConnection(myConn);
        cn.Open();
        OleDbCommand cmd = new OleDbCommand(myQuery, cn);
        cmd.ExecuteNonQuery();
        cn.close();
    					
  4. 修改連接字串,使之適用於您的環境。
  5. 編譯專案。
  6. 在您的瀏覽器中檢視的 WebForm1.aspx。請注意您會收到上述的例外狀況的其中一個。

?考

如需詳細資訊按一下 [下列面的文件編號,檢視 「 Microsoft 知識庫 」 中發行項]:
306590? (http://support.microsoft.com/kb/306590/ ) ASP.NET 安全性概觀
307626? (http://support.microsoft.com/kb/307626/ ) ASP.NET 組態概觀
如需有關 <processmodel> 區段中,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
<processmodel>區段
http://msdn2.microsoft.com/en-us/library/7w2sway1(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/7w2sway1(vs.71).aspx)

這篇文章中的資訊適用於:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET 1.0
  • Microsoft ASP.NET 1.0
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Office FrontPage 2003
關鍵字:?
kbmt kbtshoot kberrmsg kbnofix kbprb kbsystemdata KB316675 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:316675? (http://support.microsoft.com/kb/316675/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。