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 の修正を 1 つのダウンロード可能なファイルとして配布しています。 修正は累積的であるため、各新しいリリースには、以前の SQL Server 2005、Microsoft SQL Server 2008、または SQL Server 2008 R2 の修正プログラム リリースに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。

現象

たとえば次のようなシナリオを考えてみます。

  • 次のいずれかの .NET Framework がインストールされているコンピューターで、Microsoft SQL Server 2005、Microsoft SQL Server 2008、または SQL Server 2008 R2 統合サービス パッケージ (SSIS) を実行している場合。

    • .NET Framework 2.0 Service Pack 2 (SP2)
    • .NET Framework 3.5 Service Pack 1 (SP1)
  • SSIS パッケージは、文字データをインポートするサード パーティの ODBC ドライバーを使用します。

ただし、SSIS パッケージを実行すると、次のエラー メッセージが表示されます。

注

[ADO NET Source [1424]]エラー: SSIS エラー コード DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 エラー コード 0x80131937 が発生したため、"コンポーネント "ADO NET Source" (1424)" に失敗し、"出力列 "columnname" (数値)" のエラー行のdispositionでエラーが失敗するように指定されています。 指定したコンポーネントの指定したオブジェクトでエラーが発生しました。 この前に、エラーの詳細情報が投稿されたエラー メッセージが表示される場合があります。

エラー 0xc0209029: Data Flow タスク: エラー コード 0x80131937 が発生したため、"コンポーネント "ComponentName" (1)" に失敗しました...

[ADO NET Source [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 ドライバーから文字列が読み取られます。 この変更により、ネイティブ ODBC ドライバーで SQLGetData API 関数を使用して呼び出されるマネージ ODBC プロバイダーでは、サイズ 0 のバッファーが使用されます。 準拠した ODBC ドライバーでは、この呼び出しで問題はありません。 ただし、そのような状況では、準拠していない ODBC ドライバーが失敗する可能性があります。 準拠している ODBC ドライバーの場合、サイズ 0 のバッファーが検出されると、SQLGetData API 関数によって SUCCESS_WITH_INFO が返されます。 非準拠の ODBC ドライバーの場合、呼び出しにより NO_DATA が返されます。

解決策

修正プログラムの情報

マイクロソフトでは、この問題を修正する修正プログラムを提供しています。 ただし、この修正プログラムは、ここで説明する問題のみを修正することを目的としたものです。 この修正プログラムは、ここで説明する問題が発生しているシステムにのみ適用してください。 この修正プログラムは、今後さらにテストを行う場合があります。 したがって、この問題で深刻な影響を受けていない場合は、この修正プログラムが含まれる次のソフトウェア更新プログラムがリリースされるまで待つことを推奨します。

修正プログラムをダウンロードできる場合は、このサポート技術情報の資料の上部に「修正プログラムのダウンロード」セクションがあります。 このセクションが表示されていない場合は、Microsoft カスタマー サービス & サポート にお問い合わせのうえ、修正プログラムを入手してください。

注: 別の問題が発生した場合、またはトラブルシューティングが必要な場合には、別のサービス リクエストを作成することが必要になる場合があります。 特定の修正プログラムの対象とならない追加の質問および問題については、通常のサポート料金が適用されます。 Microsoft カスタマー サービス & サポート の電話番号一覧または別のサービス リクエストの作成については、次のマイクロソフト Web サイトを参照してください。

http://support.microsoft.com/contactus/?ws=support 注: [修正プログラムのダウンロードが利用可能] フォームには、修正プログラムを使用できる言語が表示されます。 使用している言語が表示されない場合は、その言語の修正プログラムが存在しないことになります。

前提条件

.NET Framework 2.0 Service Pack 2 がインストールされている必要があります。

再起動に関する情報

この修正プログラムの適用後にコンピューターを再起動する必要はありません。

レジストリ情報

レジストリを変更する必要はありません。

修正プログラム ファイルの情報

この修正プログラムには、この資料に記載されている問題を修正するために必要なファイルのみが含まれています。 この修正プログラムには、製品を最新のビルドに更新するために必要なファイルがすべて含まれているとは限りません。修正プログラム (英語版) のファイル属性は次表のとおりです。ただし、これより新しい修正プログラムがリリースされている可能性もあります。 これらのファイルの日付と時刻は世界協定時 (UTC) で記載されています。 ファイル情報に表示される時刻は、ローカル時刻に変換されています。 UTC とローカル時刻との時差を確認するには、[コントロール パネル] の [日付と時刻] の [タイム ゾーン] タブを使用してください。

Windows 2000、Windows Server 2003、Windows XP、32 ビット版用の .NET Framework 2.0

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻 プラットフォーム
System.data.dll 2.0.50727.4063 2,933,760 19- 05:08 x86

Windows 2000、Windows Server 2003、Windows XP、x64 バージョン用の .NET Framework 2.0

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻 プラットフォーム
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

Windows 2000、Windows Server 2003、Windows XP、IA-64 バージョン用の .NET Framework 2.0

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻 プラットフォーム
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

Windows Vista、Windows Server 2008、32 ビット版用の .NET Framework 2.0

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻
System.data.dll 2.0.50727.4400 2,933,760 2009 年 9 月 10 日 1,154

Windows Vista、Windows Server 2008、x64 バージョン用の .NET Framework 2.0

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻
System.data.dll 2.0.50727.4400 3,008,512 2009 年 9 月 10 日 1,154

Windows Vista、Windows Server 2008、IA-64 バージョン用の .NET Framework 2.0

ファイル名 ファイルのバージョン ファイル サイズ 日付 時刻
System.data.dll 2.0.50727.4400 3,234,816 2009 年 9 月 10 日 1,154

回避策

この問題を回避するには、以下のいずれかの方法を使用します。

方法 1

SSIS パッケージを編集して、DataReader ソースまたはマネージ ADO.NET データ ソースでエラーと切り捨てリダイレクトを構成します。 エラー出力を宛先にリダイレクトするように SSIS パッケージを編集すると、宛先に行が書き込まれていない場合でも、パッケージは正常に実行されます。 そのためには、以下の手順を実行します。

注: 以下の手順では、DataReader ソースからデータを読み取る SQL Server 2005 SSIS パッケージを使用していることを前提としています。

  1. SQL Server Business Intelligence Development Studio で SSIS パッケージを開きます。

  2. Data Flow デザイナーで DataReader ソースの詳細エディターダイアログ ボックスを開きます。

  3. [入力と出力のプロパティ] タブをクリックし、[入力と出力] ツリーの [DataReader の出力] ノードを展開します。

  4. [ 出力列 ] ノードを展開します。

  5. [ 出力列 ] ノードの下の各列をクリックし、DataType プロパティを確認します。 DataType プロパティが DT_WSTR、DT_NTEXT、DT_BYTES、または DT_IMAGE の各列について、次の 2 つのプロパティを編集します。

    • ErrorRowDisposition プロパティを RD_RedirectRow に設定します。
    • TruncationRowDisposition プロパティを RD_RedirectRow に設定します。
  6. [OK] をクリックして変更を保存します。

  7. Data Flow デザイナーで、新しい宛先を追加します。 たとえば、フラット ファイルの保存先または SQL Server の保存先を追加します。

  8. DataReader ソースの赤い矢印を使用して、新しく追加した宛先に接続します。 この操作は、エラー行を保存するために、エラー行と切り捨て行をコピー先に転送します。

  9. ODBC の文字列または画像列にアクセスし、「現象」セクションに記載されているエラー メッセージで失敗するすべての Data Flow タスクに対して、手順 1 から 8 を繰り返します。

方法 2

.NET Framework 2.0 SP2 または ..NET Framework 3.5 SP1 をアンインストールします。 ただし、Service Pack をアンインストールすることはお勧めしません。これにより、Service Pack が提供する信頼性、機能強化、およびパフォーマンスの最適化が低下するためです。

システムを .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 を入手するには、次のマイクロソフト Web サイトにアクセスしてください。
    http://www.microsoft.com/download/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en

方法 3

サードパーティ製 ODBC ドライバーのベンダーに問い合わせて、ベンダーがこの問題を解決するためのドライバーの更新プログラムを持っているかどうかを確認します。

状態

Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。