FIX: OdbcConnection 物件不會報告錯誤當您指定的交易隔離等級不支援的資料來源在.NET Framework 2.0

文章翻譯 文章翻譯
文章編號: 917752 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

考慮下列案例。您使用 Microsoft.NET Framework 資料提供者的.NET Framework 2.0 的 ODBC 連線到資料來源應用程式中。您可以啟動交易,然後使用 BeginTransaction 方法 OdbcConnection 物件。您指定的交易隔離等級不支援的交易的資料來源。在這種情況下 OdbcException 例外狀況不會如預期般。不過,如預期般使用.NET Framework 1.1 時,就會發生在例外狀況。

發生的原因

之所以發生這個問題,是因為 BeginTransaction 方法不會報告 ODBC 錯誤 (SQL_ERROR) 的 SQLSetConnectAttr 函式傳回。自動認可模式是針對.NET Framework 資料提供者的 ODBC 預設交易管理的模式。資料提供者只會關閉自動認可模式當正確地設定交易隔離等級。 因此,如果您指定不正確的交易隔離等級,交易無法運作。如果呼叫 Commit 方法或 復原 方法則是無效的。認可 方法和 復原 方法並不會報告 ODBC 錯誤 (SQL_ERROR)。

解決方案

一個支援的 Hotfix 現在已可從 Microsoft取得。不過,它只修正本文中所述此問題。請只在發生此特定問題的系統上套用。此 Hotfix 可能會接受其他測試。因此,如果您不會嚴重影響這個問題,我們建議您等候下一個 NET Framework 2.0 Service Pack 包含此 Hotfix。

如果要立即解決這個問題,請聯絡 Microsoft 客戶支援服務 」,以取得該 Hotfix。如需 Microsoft 客戶支援服務電話號碼及支援成本的相關資訊的完整清單,請造訪下列 Microsoft 網站]:
http://support.microsoft.com/contactus/?ws=support
附註 在特殊情況下通常會因支援電話所產生的費用可能就不收取如果 Microsoft 支援人員認為某特定更新程式可以解決您的問題。平常的支援成本將會套用到其他支援問題是所做不限定特定有問題的更新程式。

必要條件

若要將這個 Hotfix,您必須具備 Microsoft 支援您的電腦上安裝下列 「 Microsoft 知識庫 」 文件中的所描述的檔案:
916002當您嘗試使用 ADO.NET 2.0 架構的應用程式中 SqlClient 類別以連線至 SQL Server 2005 的執行個體 FIX: 錯誤訊息: 「 新的要求不允許啟動,因為它應該會隨附有效的交易描述項"

重新啟動需求

您沒有套用此 Hotfix 之後重新啟動電腦。

登錄資訊

您沒有變更登錄。

Hotfix 檔案資訊

此 Hotfix 包含只需修正本文所列問題的那些檔案。此 Hotfix 不能包含所有必須將產品完整更新至最新版組建的檔案。此 Hotfix 的英文版在檔案屬性 (或更新版本的檔案屬性) 如下列表格中所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用在 [日期及時間中項目控制台中的 [時區] 索引標籤]。

.NET Framework 2.0 32 位元版本

摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Mscordacwks.dll2.0.50727.158800,7682006 年五月 24 日14: 59x86
Mscorlib.dll2.0.50727.1584,317,1842006 年五月 24 日14: 59x86
Mscorwks.dll2.0.50727.1585,623,2962006 年五月 24 日14: 59x86
Sos.dll2.0.50727.158377,3442006 年五月 24 日14: 59x86
System.Data.dll2.0.50727.1582,893,8242006 年五月 24 日14: 59x86

.NET 架構 2.0 x x64 為主版

摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Mscordacwks.dll2.0.50727.1581,597,4402006 年五月 24 日06: 09x64
Mscorlib.dll2.0.50727.1583,956,7362006 年五月 24 日11: 25x64
Mscorwks.dll2.0.50727.15810,306,0482006 年五月 24 日06: 05x64
Sos.dll2.0.50727.158476,1602006 年五月 24 日06: 15x64
System.Data.dll2.0.50727.1582,959,8722006 年五月 24 日11: 25x64

.NET 架構 2.0 Itanium 架構版本

摺疊此表格展開此表格
檔案名稱檔案版本檔案大小日期時間平台
Mscordacwks.dll2.0.50727.1582,710,0162006 年五月 24 日06: 14IA 64
Mscorlib.dll2.0.50727.1583,956,7362006 年五月 24 日12: 03IA 64
Mscorwks.dll2.0.50727.15821,260,2882006 年五月 24 日06: 11IA 64
Sos.dll2.0.50727.158857,0882006 年五月 24 日06: 22IA 64
System.Data.dll2.0.50727.1583,102,2082006 年五月 24 日12: 03IA 64

其他可行方案

若要解決這個問題,請確定您使用正確的交易隔離等級。您可以將程式碼加入至應用程式驗證交易層級是否正確,並在您的程式碼會擲回例外狀況。

狀況說明

Microsoft 已確認<適用於>一節所列之 Microsoft 產品確實有此問題。

其他相關資訊

如 Microsoft SQL Server 更新命名的結構描述的更多有關,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
822499Microsoft SQL Server 軟體更新套件的新命名結構描述

如需有關軟體更新術語的詳細資訊,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
824684用來描述 Microsoft 軟體更新標準術語的說明

其他相關資訊

這個問題可能會導致資料損毀,因為您不能使用 復原 方法。比方說,您可以指定一個不正確的交易層級。您預期會發生資料損毀發生時復原。不過,復原不會發生。因為 Commit 方法不會報告錯誤,因為資料可能不已認可如預期般運作,就可能會發生資料損毀。

如果要重現問題的步驟

  1. 建立 Microsoft Access 資料檔 (.mdb),然後再建立一個資料表,其中包含兩個資料行。假設資料檔會儲存在 d:\db1.mdb 資料夾中,而且該資料表的名稱是 T1。假設兩個資料行具名 C1 和 C2。
  2. 將一些資料錄插入 T1 資料表中。
  3. 使用 Microsoft Visual Studio 2005 建立 C# 專案,然後將下列程式碼貼到
    string cnstr = @"Driver={Microsoft Access Driver (*.mdb)};DBQ=d:\db1.mdb;UID=Admin;PWD=;"
    OdbcConnection cn = new OdbcConnection(cnstr);
    cn.Open();
    System.Diagnostics.Debug.WriteLine("connected.");
    
    try
    {
    OdbcTransaction trn = cn.BeginTransaction(IsolationLevel.ReadUncommitted);
    OdbcCommand cmd = new OdbcCommand("select * from T1", C1, C2);
    OdbcDataReader dr;
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
    System.Diagnostics.Debug.WriteLine(dr[1].ToString());
    }
    dr.Close();
    trn.Commit();
    }
    catch (OdbcException odbcex)
    {
    System.Diagnostics.Debug.WriteLine(odbcex.Message);
    System.Diagnostics.Debug.WriteLine(odbcex.StackTrace);
    }
    cn.Close();
    cn = null;
    
    方法。
  4. 執行該應用程式,並確定呼叫方法。
完成這些步驟之後,您會注意到發生任何例外狀況。

屬性

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

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com