KB969845 - 修正:當您安裝 .NET Framework 2.0 SP2 或 .NET Framework 3.5 SP1 後,執行 SQL Server 2005、SQL Server 2008 或 SQL Server 2008 R2 Integration Services (套件) SSIS 時,會跳出錯誤訊息:「ADO NET Source [1424]」

套用到
Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Developer Edition Microsoft SQL Server 2005 Enterprise Edition Microsoft SQL Server 2005 Standard X64 Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Workgroup Edition SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup

Microsoft 將 Microsoft SQL Server 2005、Microsoft SQL Server 2008 及 Microsoft SQL Server 2008 R2 修正作為一個可下載檔案發行。 由於修補是累積性的,每個新版本都包含了先前 SQL Server 2005、Microsoft SQL Server 2008 或 SQL Server 2008 R2 修正釋版本中包含的所有熱修補與安全修補。

症狀

請考慮以下案例:

  • 你在擁有以下.NET Framework安裝之一的電腦上,運行 2005 SQL Server Microsoft 2008 SQL Server 200 SQL Server 8 Microsoft (2008 SSIS) :

    • .NET Framework 2.0 服務包 2 (SP2)
    • .NET Framework 3.5 Service Pack 1 (SP1)
  • SSIS 套件使用第三方 ODBC 驅動程式來匯入字元資料。

然而,當你執行 SSIS 套件時,會收到以下錯誤訊息:

注意

[ADO NET 來源 [1424]]錯誤:SSIS 錯誤代碼 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 「元件「ADO NET Source」 (1424) 」因錯誤代碼0x80131937而失敗,而「輸出欄位「欄位名稱」 (編號) 」的錯誤列判定則指定錯誤時失敗。 在指定元件的指定物件上發生錯誤。 在此之前可能會發布錯誤訊息,提供更多故障資訊。

錯誤0xc0209029:資料流任務:「元件「元件名稱」 (1) “ 因錯誤代碼 0x80131937 發生而失敗...

[ADO NET 來源 [1424]]錯誤:「ADO NET Source」元件 (1424) 無法處理資料。 管線元件從方法呼叫中回傳了 HRESULT 錯誤代碼0xC0209029。

[SSIS。Pipeline] 錯誤:SSIS 錯誤代碼 DTS_E_PRIMEOUTPUTFAILED。 在元件「ADO NET Source」 (1424 上的 PrimeOutput 方法) 回傳錯誤碼 0xC02090F5。 當管線引擎呼叫 PrimeOutput () 時,元件會回傳失敗代碼。 故障代碼的意義由元件定義,但錯誤是致命的,管線因此停止執行。 在此之前可能會發布錯誤訊息,提供更多故障資訊。

當以下條件成立時,此問題會影響由受管理 ODBC 提供者存取的 ODBC 驅動程式:

  • ExecuteReader 函式由 CommandBehavior.SequentialAccess 參數呼叫。 此呼叫與參數在以下情況下使用:

    • 當 SQL Server 2005 的 SSIS 套件從 DataReader 來源讀取資料,或當 SQL Server 2008 的 SSIS 套件從受管理的 ADO.NET 資料來源讀取資料時,
    • 資料來源並未設定重定向錯誤值與截斷值。
  • 會呼叫 OdbcDataReader.IsDbNull 函式。 SSIS 套件使用此方法來判斷欄位中的值是否為 NULL。

  • 以下其中一個函式被呼叫為:

    • OdbcDataReader.GetBytes 函式是用來從受管理的 ODBC 提供者取得某些資料型態,例如 DT_BYTES。
    • OdbcDataReader.GetChars 函式是用來從受管理的 ODBC 提供者取得某些字串資料型別,例如 DT_WSTR。

原因

.NET Framework 2.0 SP2 與 .NET Framework 3.5 SP1 在受管理的 ODBC 提供者中引入了變更,該服務在「症狀」章節描述的情境中,從原生 ODBC 驅動程式讀取字串。 因此,透過 SQLGetData 函式在原生 ODBC 驅動程式中呼叫的受管理 ODBC 提供者,會使用大小為 0 的緩衝區。 合規的 ODBC 驅動程式在此通話中不會有問題。 然而,不合規的ODBC駕駛人在此情況下可能會失敗。 對於符合規範的 ODBC 驅動程式,當偵測到大小為 0 的緩衝區時,SQLGetData API 函式會回傳 SUCCESS_WITH_INFO。 對於不合規的 ODBC 驅動程式,呼叫會回傳 NO_DATA。

解決方式

Hotfix 資訊

Microsoft 已提供支援的熱修補程式。 不過,這個熱修正僅針對本文所述的問題進行修正。 只對遇到此問題的系統套用熱修補。 這個熱修補可能會有額外的測試。 因此,如果您沒有受到此問題嚴重影響,我們建議您等待下一次包含此熱修補丁的軟體更新。

如果熱修補程式可供下載,這篇知識庫文章頂部有一個「熱修補丁下載可用」的區塊。 若此部分未出現,請聯絡 Microsoft 客服與支援以取得熱修正。

注意:如果發生其他問題或需要排除故障,您可能需要另行申請服務。 一般的支援費用將適用於不符合本次熱修正範圍的其他支援問題與問題。 欲查詢完整的 Microsoft 客戶服務與支援電話號碼清單,或建立獨立服務請求,請造訪以下 Microsoft 網站:

http://support.microsoft.com/contactus/?ws=support 注意「熱修正下載可用」表單顯示該熱修正可用的語言。 如果你看不到你的語言,那是因為該語言沒有熱修正。

先決條件

你必須安裝 .NET Framework 2.0 Service Pack 2。

重新啟動資訊

套用這個熱修正後,你不需要重啟電腦。

登錄資訊

你不需要更改登記冊。

熱修正檔案資訊

此熱修正僅包含修正本文列出問題所需的檔案。 這個熱修補可能沒有包含你必須擁有的所有檔案,才能完全更新產品到最新版本。此熱修正的英文版本包含以下表格中列出的檔案屬性 (或更新版本的檔案屬性) 。 這些檔案的日期與時間是以國際標準時間 (UTC) 表示。 當您檢視檔案資訊時,它會轉換成當地時間。 若要查看 UTC 與當地時間的差異,請使用 [控制台] 中 [日期和時間] 項目的 [時區] 索引標籤。

.NET Framework 2.0 適用於 Windows 2000、Windows Server 2003、Windows XP,32 位元版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86

.NET Framework 2.0 適用於 Windows 2000、Windows Server 2003、Windows XP、x64 版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
System.data.dll 2.0.50727.4063 3,008,512 18- 23:51 x64
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86

.NET Framework 2.0 適用於 Windows 2000、Windows Server 2003、Windows XP、IA-64 版本

檔案名稱 檔案版本 檔案大小 日期 時間 平台
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86
System.data.dll 2.0.50727.4063 3,234,816 19- 01:09 IA-64

.NET Framework 2.0 for Windows Vista、Windows Server 2008,32位元版本

檔案名稱 檔案版本 檔案大小 日期 時間
System.data.dll 2.0.50727.4400 2,933,760 2009 年 9 月 10 日 1,154

.NET Framework 2.0 適用於 Windows Vista、Windows Server 2008、x64 版本

檔案名稱 檔案版本 檔案大小 日期 時間
System.data.dll 2.0.50727.4400 3,008,512 2009 年 9 月 10 日 1,154

.NET Framework 2.0 for Windows Vista、Windows Server 2008、IA-64 版本

檔案名稱 檔案版本 檔案大小 日期 時間
System.data.dll 2.0.50727.4400 3,234,816 2009 年 9 月 10 日 1,154

因應措施

若要暫時略過這個問題,請使用下列其中一個方法。

方法 1

編輯 SSIS 套件,在 DataReader 來源或受管理的 ADO.NET 資料來源上設定錯誤與截斷重定向。 當你編輯 SSIS 套件將錯誤輸出導向目的地後,套件會成功執行,即使沒有寫入任何資料列到目的地。 若要執行這項操作,請依照下列步驟執行。

注意:以下步驟假設您使用的是 SQL Server 2005 SSIS 套件,該套件能從 DataReader 來源讀取資料。

  1. 在 SQL Server 商業智慧開發工作室開啟 SSIS 套件。

  2. 在資料流程設計器中開啟資料閱讀器來源的進階編輯器對話框。

  3. 點選輸入與輸出屬性標籤,然後在輸入與輸出樹中展開 DataReader 輸出節點。

  4. 展開 輸出欄位 節點。

  5. 點擊輸出欄位節點下的每一欄,然後檢視 DataType 屬性。 對於每一欄資料型屬性為 DT_WSTR、DT_NTEXT、DT_BYTES 或 DT_IMAGE,請編輯以下兩個屬性:

    • 將 ErrorRowDisposition 屬性設為 RD_RedirectRow。
    • 將 TruncationRowDisposition 屬性設為 RD_RedirectRow。
  6. 按一下 [確定] 儲存變更。

  7. 在資料流程設計器中,新增一個目的地。 例如,新增一個平面檔案目的地或 SQL Server 目的地。

  8. 利用 DataReader 來源的紅色箭頭將其連接到新新增的目的地。 此操作會將錯誤列與截斷列導向目的地,以儲存錯誤列。

  9. 對所有存取 ODBC 字串或影像欄位且因「症狀」區段中提及錯誤訊息而失敗的資料流程任務,重複第 1 至 8 步。

方法 2

請卸載 .NET Framework 2.0 SP2 或 .NET Framework 3.5 SP1。 然而,我們不建議您卸載服務包,因為這會犧牲服務包所提供的可靠性、功能改進與效能優化。

要將系統恢復到安裝 .NET Framework 2.0 SP2 或 .NET Framework 3.5 SP1 前的狀態,請遵循以下步驟:

  1. 在控制台中,雙擊新增或移除程式

  2. 找到 Microsoft .NET Framework 3.5 SP1,然後卸載它。

  3. 找到 Microsoft .NET Framework 3.0 SP2,然後卸載它。

  4. 找到 Microsoft .NET Framework 2.0 SP2,然後卸載它。

  5. 重新安裝 .NET Framework 3.5 的原始版本。 此步驟將重新安裝 .NET Framework 2.0 SP1 與 .NET Framework 3.0 SP1。 要取得 .NET Framework 3.5,請造訪以下 Microsoft 網站:
    http://www.microsoft.com/download/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en

方法三

請聯絡第三方 ODBC 驅動程式的供應商,確認該廠商是否有驅動程式的更新以解決此問題。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。